Merge remote-tracking branch 'inventree/master'

This commit is contained in:
Oliver Walters 2021-04-14 11:08:21 +10:00
commit 4c86593159
22 changed files with 1169 additions and 513 deletions

View File

@ -32,6 +32,7 @@ def health_status(request):
status = {
'django_q_running': InvenTree.status.is_worker_running(),
'email_configured': InvenTree.status.is_email_configured(),
}
all_healthy = True

View File

@ -52,6 +52,10 @@ class AuthRequiredMiddleware(object):
if request.path_info.startswith('/static/'):
authorized = True
# Unauthorized users can access the login page
elif request.path_info.startswith('/accounts/'):
authorized = True
elif 'Authorization' in request.headers.keys():
auth = request.headers['Authorization'].strip()

View File

@ -495,6 +495,51 @@ CURRENCIES = CONFIG.get(
# TODO - Allow live web-based backends in the future
EXCHANGE_BACKEND = 'InvenTree.exchange.InvenTreeManualExchangeBackend'
# Extract email settings from the config file
email_config = CONFIG.get('email', {})
EMAIL_BACKEND = get_setting(
'django.core.mail.backends.smtp.EmailBackend',
email_config.get('backend', '')
)
# Email backend settings
EMAIL_HOST = get_setting(
'INVENTREE_EMAIL_HOST',
email_config.get('host', '')
)
EMAIL_PORT = get_setting(
'INVENTREE_EMAIL_PORT',
email_config.get('port', 25)
)
EMAIL_HOST_USER = get_setting(
'INVENTREE_EMAIL_USERNAME',
email_config.get('username', ''),
)
EMAIL_HOST_PASSWORD = get_setting(
'INVENTREE_EMAIL_PASSWORD',
email_config.get('password', ''),
)
EMAIL_SUBJECT_PREFIX = '[InvenTree] '
EMAIL_USE_LOCALTIME = False
EMAIL_USE_TLS = get_setting(
'INVENTREE_EMAIL_TLS',
email_config.get('tls', False),
)
EMAIL_USE_SSL = get_setting(
'INVENTREE_EMAIL_SSL',
email_config.get('ssl', False),
)
EMAIL_TIMEOUT = 60
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale/'),
)

View File

@ -11,6 +11,9 @@ from datetime import datetime, timedelta
from django_q.models import Success
from django_q.monitor import Stat
from django.conf import settings
logger = logging.getLogger("inventree")
@ -43,6 +46,30 @@ def is_worker_running(**kwargs):
return results.exists()
def is_email_configured():
"""
Check if email backend is configured.
NOTE: This does not check if the configuration is valid!
"""
configured = True
if not settings.EMAIL_HOST:
logger.warning("EMAIL_HOST is not configured")
configured = False
if not settings.EMAIL_HOST_USER:
logger.warning("EMAIL_HOST_USER is not configured")
configured = False
if not settings.EMAIL_HOST_PASSWORD:
logger.warning("EMAIL_HOST_PASSWORD is not configured")
configured = False
return configured
def check_system_health(**kwargs):
"""
Check that the InvenTree system is running OK.
@ -56,6 +83,10 @@ def check_system_health(**kwargs):
result = False
logger.warning(_("Background worker check failed"))
if not is_email_configured():
result = False
logger.warning(_("Email backend not configured"))
if not result:
logger.warning(_("InvenTree system health checks failed"))

View File

@ -51,6 +51,24 @@ def schedule_task(taskname, **kwargs):
pass
def offload_task(taskname, *args, **kwargs):
"""
Create an AsyncTask.
This is different to a 'scheduled' task,
in that it only runs once!
"""
try:
from django_q.tasks import AsyncTask
except (AppRegistryNotReady):
logger.warning("Could not offload task - app registry not ready")
return
task = AsyncTask(taskname, *args, **kwargs)
task.run()
def heartbeat():
"""
Simple task which runs at 5 minute intervals,
@ -141,3 +159,20 @@ def check_for_updates():
tag,
None
)
def send_email(subject, body, recipients, from_email=None):
"""
Send an email with the specified subject and body,
to the specified recipients list.
"""
if type(recipients) == str:
recipients = [recipients]
offload_task(
'django.core.mail.send_mail',
subject, body,
from_email,
recipients,
)

View File

@ -133,7 +133,7 @@ urlpatterns = [
url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^login/?', auth_views.LoginView.as_view(), name='login'),
url(r'^logout/', auth_views.LogoutView.as_view(template_name='registration/logout.html'), name='logout'),
url(r'^logout/', auth_views.LogoutView.as_view(template_name='registration/logged_out.html'), name='logout'),
url(r'^settings/', include(settings_urls)),
@ -143,6 +143,7 @@ urlpatterns = [
url(r'^admin/error_log/', include('error_report.urls')),
url(r'^admin/shell/', include('django_admin_shell.urls')),
url(r'^admin/', admin.site.urls, name='inventree-admin'),
url(r'accounts/', include('django.contrib.auth.urls')),
url(r'^index/', IndexView.as_view(), name='index'),
url(r'^search/', SearchView.as_view(), name='search'),

View File

@ -63,6 +63,31 @@ currencies:
- NZD
- USD
# Email backend configuration
# Ref: https://docs.djangoproject.com/en/dev/topics/email/
# Available options:
# host: Email server host address
# port: Email port
# username: Account username
# password: Account password
# prefix: Email subject prefix
# tls: Enable TLS support
# ssl: Enable SSL support
# Alternatively, these options can all be set using environment variables,
# with the INVENTREE_EMAIL_ prefix:
# e.g. INVENTREE_EMAIL_HOST / INVENTREE_EMAIL_PORT / INVENTREE_EMAIL_USERNAME
# Refer to the InvenTree documentation for more information
email:
# backend: 'django.core.mail.backends.smtp.EmailBackend'
host: ''
port: 25
username: ''
password: ''
tls: False
ssl: False
# Set debug to False to run in production mode
# Use the environment variable INVENTREE_DEBUG
debug: True

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-04-04 20:24+0000\n"
"POT-Creation-Date: 2021-04-11 22:07+0000\n"
"PO-Revision-Date: 2021-03-28 17:47+0200\n"
"Last-Translator: Andreas Kaiser <kaiser.vocote@gmail.com>, Matthias "
"MAIR<matmair@live.de>\n"
@ -18,15 +18,15 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.4.2\n"
#: InvenTree/api.py:62
#: InvenTree/api.py:64
msgid "API endpoint not found"
msgstr "API-Endpunkt nicht gefunden"
#: InvenTree/api.py:108
#: InvenTree/api.py:110
msgid "No action specified"
msgstr "Keine Aktion angegeben"
#: InvenTree/api.py:122
#: InvenTree/api.py:124
msgid "No matching action found"
msgstr "Keine passende Aktion gefunden"
@ -126,7 +126,7 @@ msgstr "Datei-Kommentar"
#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1888
#: report/templates/report/inventree_test_report_base.html:91
#: templates/js/stock.js:960
#: templates/js/stock.js:964
msgid "User"
msgstr "Benutzer"
@ -142,7 +142,7 @@ msgid "Name"
msgstr "Name"
#: InvenTree/models.py:114 build/models.py:134
#: build/templates/build/detail.html:21 company/models.py:361
#: build/templates/build/detail.html:21 company/models.py:365
#: company/templates/company/detail.html:26
#: company/templates/company/supplier_part_base.html:70
#: company/templates/company/supplier_part_detail.html:31 label/models.py:108
@ -157,8 +157,8 @@ msgstr "Name"
#: templates/js/build.js:677 templates/js/build.js:944
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:168 templates/js/part.js:251
#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:552
#: templates/js/stock.js:934
#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:554
#: templates/js/stock.js:938
msgid "Description"
msgstr "Beschreibung"
@ -170,31 +170,31 @@ msgstr "Beschreibung (optional)"
msgid "parent"
msgstr "Eltern"
#: InvenTree/settings.py:430
#: InvenTree/settings.py:480
msgid "English"
msgstr "Englisch"
#: InvenTree/settings.py:431
#: InvenTree/settings.py:481
msgid "French"
msgstr "Französisch"
#: InvenTree/settings.py:432
#: InvenTree/settings.py:482
msgid "German"
msgstr "Deutsch"
#: InvenTree/settings.py:433
#: InvenTree/settings.py:483
msgid "Polish"
msgstr "Polnisch"
#: InvenTree/settings.py:434
#: InvenTree/settings.py:484
msgid "Turkish"
msgstr "Türkisch"
#: InvenTree/status.py:24
msgid "Celery worker check failed"
msgstr "Celery Worker Check fehlgeschlagen"
#: InvenTree/status.py:57
msgid "Background worker check failed"
msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen"
#: InvenTree/status.py:27
#: InvenTree/status.py:60
msgid "InvenTree system health checks failed"
msgstr "InvenTree Status-Überprüfung fehlgeschlagen"
@ -310,7 +310,7 @@ msgstr "Passwort eingeben"
msgid "Password fields must match"
msgstr "Passwörter stimmen nicht überein"
#: InvenTree/views.py:887 templates/navbar.html:83
#: InvenTree/views.py:887 templates/navbar.html:85
msgid "System Information"
msgstr "Systeminformationen"
@ -406,7 +406,7 @@ msgstr "Zieldatum für Bauauftrag-Fertigstellung."
#: stock/templates/stock/item_base.html:240
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954
#: templates/js/stock.js:952 templates/js/stock.js:1190
#: templates/js/stock.js:956 templates/js/stock.js:1194
msgid "Quantity"
msgstr "Anzahl"
@ -452,7 +452,7 @@ msgstr "Bauauftrag als vollständig markieren"
#: stock/templates/stock/stock_adjust.html:17
#: templates/InvenTree/search.html:244 templates/js/barcode.js:363
#: templates/js/barcode.js:531 templates/js/build.js:434
#: templates/js/stock.js:637
#: templates/js/stock.js:641
msgid "Location"
msgstr "Lagerort"
@ -495,7 +495,7 @@ msgstr "Bauauftrag"
#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12
#: order/templates/order/so_navbar.html:19
#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:181
#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182
#: templates/InvenTree/search.html:169
#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
msgid "Build Orders"
@ -529,7 +529,7 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist"
#: build/models.py:152 build/templates/build/auto_allocate.html:16
#: build/templates/build/build_base.html:86
#: build/templates/build/detail.html:26 company/models.py:535
#: build/templates/build/detail.html:26 company/models.py:539
#: order/models.py:637 order/models.py:669
#: order/templates/order/order_wizard/select_parts.html:30
#: order/templates/order/purchase_order_detail.html:156
@ -548,8 +548,8 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist"
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:681 templates/js/build.js:921
#: templates/js/company.js:138 templates/js/part.js:232
#: templates/js/part.js:337 templates/js/stock.js:524
#: templates/js/stock.js:1262
#: templates/js/part.js:337 templates/js/stock.js:523
#: templates/js/stock.js:1266
msgid "Part"
msgstr "Teil"
@ -667,7 +667,7 @@ msgid "Link to external URL"
msgstr "Link zu einer externen URL"
#: build/models.py:261 build/templates/build/navbar.html:59
#: company/models.py:129 company/models.py:368
#: company/models.py:133 company/models.py:372
#: company/templates/company/navbar.html:59
#: company/templates/company/navbar.html:62 order/models.py:123
#: order/models.py:597 order/templates/order/po_navbar.html:29
@ -681,7 +681,7 @@ msgstr "Link zu einer externen URL"
#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377
#: stock/models.py:496 stock/models.py:1555 stock/models.py:1665
#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37
#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:667
#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:671
msgid "Notes"
msgstr "Notizen"
@ -757,7 +757,7 @@ msgstr "Bauauftrag starten um Teile zuzuweisen"
#: stock/templates/stock/item_base.html:89
#: stock/templates/stock/item_base.html:324
#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771
#: templates/js/stock.js:923 templates/js/stock.js:1181
#: templates/js/stock.js:927 templates/js/stock.js:1185
msgid "Stock Item"
msgstr "BestandsObjekt"
@ -919,7 +919,7 @@ msgstr "Bau-Status"
#: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236
#: templates/js/barcode.js:119 templates/js/build.js:710
#: templates/js/order.js:187 templates/js/order.js:285
#: templates/js/stock.js:624 templates/js/stock.js:1198
#: templates/js/stock.js:628 templates/js/stock.js:1202
msgid "Status"
msgstr "Status"
@ -1056,8 +1056,8 @@ msgid "Destination location not specified"
msgstr "Ziel-Lagerort nicht angegeben"
#: build/templates/build/detail.html:70
#: stock/templates/stock/item_base.html:288 templates/js/stock.js:632
#: templates/js/stock.js:1205 templates/js/table_filters.js:85
#: stock/templates/stock/item_base.html:288 templates/js/stock.js:636
#: templates/js/stock.js:1209 templates/js/table_filters.js:85
#: templates/js/table_filters.js:179
msgid "Batch"
msgstr "Los"
@ -1323,7 +1323,7 @@ msgstr "InvenTree Instanzname"
msgid "String descriptor for the server instance"
msgstr "Kurze Beschreibung der Instanz"
#: common/models.py:62 company/models.py:96 company/models.py:97
#: common/models.py:62 company/models.py:95 company/models.py:96
msgid "Company name"
msgstr "Firmenname"
@ -1675,12 +1675,12 @@ msgstr "Angegebener Wert nicht erlaubt"
msgid "Supplied value must be a boolean"
msgstr "Angegebener Wert muss ein Wahrheitswert sein"
#: company/forms.py:37 company/models.py:139
#: company/forms.py:37 company/models.py:143
#: company/templates/company/detail.html:40
msgid "Currency"
msgstr "Währung"
#: company/forms.py:38 company/models.py:141
#: company/forms.py:38 company/models.py:145
msgid "Default currency used for this company"
msgstr "Standard-Währung für diese Firma"
@ -1700,104 +1700,104 @@ msgstr "Einzelpreis"
msgid "Single quantity price"
msgstr "Preis für eine Einheit"
#: company/models.py:99
#: company/models.py:100
msgid "Company description"
msgstr "Firmenbeschreibung"
#: company/models.py:99
#: company/models.py:101
msgid "Description of the company"
msgstr "Firmenbeschreibung"
#: company/models.py:101 company/templates/company/company_base.html:70
#: company/models.py:105 company/templates/company/company_base.html:70
#: company/templates/company/detail.html:31 templates/js/company.js:60
msgid "Website"
msgstr "Website"
#: company/models.py:101
#: company/models.py:105
msgid "Company website URL"
msgstr "Firmenwebsite Adresse/URL"
#: company/models.py:104 company/templates/company/company_base.html:77
#: company/models.py:108 company/templates/company/company_base.html:77
msgid "Address"
msgstr "Adresse"
#: company/models.py:105
#: company/models.py:109
msgid "Company address"
msgstr "Firmenadresse"
#: company/models.py:108
#: company/models.py:112
msgid "Phone number"
msgstr "Kontakt-Tel."
#: company/models.py:109
#: company/models.py:113
msgid "Contact phone number"
msgstr "Kontakt-Telefon"
#: company/models.py:112 company/templates/company/company_base.html:91
#: company/models.py:116 company/templates/company/company_base.html:91
msgid "Email"
msgstr "Email"
#: company/models.py:112
#: company/models.py:116
msgid "Contact email address"
msgstr "Kontakt-Email"
#: company/models.py:115 company/templates/company/company_base.html:98
#: company/models.py:119 company/templates/company/company_base.html:98
msgid "Contact"
msgstr "Kontakt"
#: company/models.py:116
#: company/models.py:120
msgid "Point of contact"
msgstr "Anlaufstelle"
#: company/models.py:118 company/models.py:355 order/models.py:103
#: company/models.py:122 company/models.py:359 order/models.py:103
#: part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: stock/models.py:1557 templates/js/company.js:208 templates/js/part.js:430
msgid "Link"
msgstr "Link"
#: company/models.py:118
#: company/models.py:122
msgid "Link to external company information"
msgstr "Link auf externe Firmeninformation"
#: company/models.py:126 part/models.py:753
#: company/models.py:130 part/models.py:753
msgid "Image"
msgstr "Bild"
#: company/models.py:131
#: company/models.py:135
msgid "is customer"
msgstr "ist Kunde"
#: company/models.py:131
#: company/models.py:135
msgid "Do you sell items to this company?"
msgstr "Verkaufen Sie Teile an diese Firma?"
#: company/models.py:133
#: company/models.py:137
msgid "is supplier"
msgstr "ist Zulieferer"
#: company/models.py:133
#: company/models.py:137
msgid "Do you purchase items from this company?"
msgstr "Kaufen Sie Teile von dieser Firma?"
#: company/models.py:135
#: company/models.py:139
msgid "is manufacturer"
msgstr "ist Hersteller"
#: company/models.py:135
#: company/models.py:139
msgid "Does this company manufacture parts?"
msgstr "Produziert diese Firma Teile?"
#: company/models.py:315 stock/models.py:371
#: company/models.py:319 stock/models.py:371
#: stock/templates/stock/item_base.html:220
msgid "Base Part"
msgstr "Basisteil"
#: company/models.py:319 order/views.py:1372
#: company/models.py:323 order/views.py:1372
msgid "Select part"
msgstr "Teil auswählen"
#: company/models.py:325 company/templates/company/detail.html:60
#: company/models.py:329 company/templates/company/detail.html:60
#: company/templates/company/supplier_part_base.html:83
#: company/templates/company/supplier_part_detail.html:25 order/models.py:190
#: order/templates/order/order_base.html:92
@ -1807,80 +1807,80 @@ msgstr "Teil auswählen"
msgid "Supplier"
msgstr "Zulieferer"
#: company/models.py:326
#: company/models.py:330
msgid "Select supplier"
msgstr "Zulieferer auswählen"
#: company/models.py:331 company/templates/company/supplier_part_base.html:87
#: company/models.py:335 company/templates/company/supplier_part_base.html:87
#: company/templates/company/supplier_part_detail.html:26
#: order/templates/order/purchase_order_detail.html:174 part/bom.py:171
msgid "SKU"
msgstr "SKU (Lagerbestandseinheit)"
#: company/models.py:332
#: company/models.py:336
msgid "Supplier stock keeping unit"
msgstr "Lagerbestandseinheit (SKU) des Zulieferers"
#: company/models.py:342 company/templates/company/detail.html:55
#: company/models.py:346 company/templates/company/detail.html:55
#: company/templates/company/supplier_part_base.html:93
#: company/templates/company/supplier_part_detail.html:34 part/bom.py:172
#: templates/js/company.js:44 templates/js/company.js:188
msgid "Manufacturer"
msgstr "Hersteller"
#: company/models.py:343
#: company/models.py:347
msgid "Select manufacturer"
msgstr "Hersteller auswählen"
#: company/models.py:349 company/templates/company/supplier_part_base.html:99
#: company/models.py:353 company/templates/company/supplier_part_base.html:99
#: company/templates/company/supplier_part_detail.html:35
#: order/templates/order/purchase_order_detail.html:183 part/bom.py:173
#: templates/js/company.js:204
msgid "MPN"
msgstr "MPN"
#: company/models.py:350
#: company/models.py:354
msgid "Manufacturer part number"
msgstr "Hersteller-Teilenummer"
#: company/models.py:356
#: company/models.py:360
msgid "URL for external supplier part link"
msgstr "Teil-URL des Zulieferers"
#: company/models.py:362
#: company/models.py:366
msgid "Supplier part description"
msgstr "Zuliefererbeschreibung des Teils"
#: company/models.py:367 company/templates/company/supplier_part_base.html:113
#: company/models.py:371 company/templates/company/supplier_part_base.html:113
#: company/templates/company/supplier_part_detail.html:38 part/models.py:2170
#: report/templates/report/inventree_po_report.html:93
#: report/templates/report/inventree_so_report.html:93
msgid "Note"
msgstr "Notiz"
#: company/models.py:371
#: company/models.py:375
msgid "base cost"
msgstr "Basiskosten"
#: company/models.py:371
#: company/models.py:375
msgid "Minimum charge (e.g. stocking fee)"
msgstr "Mindestpreis"
#: company/models.py:373 company/templates/company/supplier_part_base.html:106
#: company/models.py:377 company/templates/company/supplier_part_base.html:106
#: stock/models.py:395 stock/templates/stock/item_base.html:295
#: templates/js/stock.js:663
#: templates/js/stock.js:667
msgid "Packaging"
msgstr "Verpackungen"
#: company/models.py:373
#: company/models.py:377
msgid "Part packaging"
msgstr "Teile-Verpackungen"
#: company/models.py:375
#: company/models.py:379
msgid "multiple"
msgstr "Vielfache"
#: company/models.py:375
#: company/models.py:379
msgid "Order multiple"
msgstr "Mehrere bestellen"
@ -1973,7 +1973,7 @@ msgstr "Neues Zulieferer-Teil anlegen"
#: company/templates/company/detail_part.html:21
#: order/templates/order/purchase_order_detail.html:74
#: part/templates/part/supplier.html:17 templates/js/stock.js:1082
#: part/templates/part/supplier.html:17 templates/js/stock.js:1086
msgid "New Supplier Part"
msgstr "Neues Zulieferer-Teil"
@ -1997,7 +1997,7 @@ msgstr "Teile löschen"
#: company/templates/company/detail_part.html:66
#: part/templates/part/bom.html:159 part/templates/part/category.html:118
#: templates/js/stock.js:1076
#: templates/js/stock.js:1080
msgid "New Part"
msgstr "Neues Teil"
@ -2052,14 +2052,14 @@ msgstr "Zulieferer-Teile"
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113
#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23
#: templates/stats.html:35 templates/stats.html:44 users/models.py:38
#: templates/stats.html:48 templates/stats.html:57 users/models.py:38
msgid "Parts"
msgstr "Teile"
#: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33
#: stock/templates/stock/location.html:100
#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182
#: templates/stats.html:48 templates/stats.html:57 users/models.py:40
#: templates/stats.html:61 templates/stats.html:70 users/models.py:40
msgid "Stock Items"
msgstr "BestandsObjekte"
@ -2071,7 +2071,7 @@ msgstr "BestandsObjekte"
#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180
#: templates/InvenTree/search.html:216
#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172
#: templates/js/part.js:397 templates/js/stock.js:559 templates/navbar.html:26
#: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26
msgid "Stock"
msgstr "Lagerbestand"
@ -2082,7 +2082,7 @@ msgstr "Lagerbestand"
#: order/templates/order/sales_orders.html:8
#: order/templates/order/sales_orders.html:13
#: part/templates/part/navbar.html:92 part/templates/part/navbar.html:95
#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:226
#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227
#: templates/InvenTree/search.html:330
#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
#: users/models.py:43
@ -2094,7 +2094,7 @@ msgstr "Aufträge"
#: order/templates/order/purchase_orders.html:8
#: order/templates/order/purchase_orders.html:13
#: part/templates/part/navbar.html:78 part/templates/part/navbar.html:81
#: part/templates/part/orders.html:10 templates/InvenTree/index.html:203
#: part/templates/part/orders.html:10 templates/InvenTree/index.html:204
#: templates/InvenTree/search.html:300
#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
#: users/models.py:42
@ -2287,7 +2287,7 @@ msgstr "Firma gelöscht"
msgid "Edit Supplier Part"
msgstr "Zulieferer-Teil bearbeiten"
#: company/views.py:378 templates/js/stock.js:1083
#: company/views.py:378 templates/js/stock.js:1087
msgid "Create new Supplier Part"
msgstr "Neues Zulieferer-Teil anlegen"
@ -2740,8 +2740,8 @@ msgstr "Position hinzufügen"
#: order/templates/order/purchase_order_detail.html:45
#: order/templates/order/purchase_order_detail.html:125
#: part/templates/part/category.html:197 part/templates/part/category.html:239
#: stock/templates/stock/location.html:191 templates/js/stock.js:704
#: templates/js/stock.js:1088
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1092
msgid "New Location"
msgstr "Neuer Lagerort"
@ -3274,7 +3274,7 @@ msgstr "Teil-Kategorie"
#: part/models.py:83 part/templates/part/category.html:19
#: part/templates/part/category.html:90 part/templates/part/category.html:141
#: templates/InvenTree/search.html:126 templates/stats.html:39
#: templates/InvenTree/search.html:126 templates/stats.html:52
#: users/models.py:37
msgid "Part Categories"
msgstr "Teil-Kategorien"
@ -3718,7 +3718,7 @@ msgid "All selected BOM items will be deleted"
msgstr "Alle ausgewählte Stücklistenpositionen werden gelöscht"
#: part/templates/part/bom.html:160 part/views.py:584
#: templates/js/stock.js:1077
#: templates/js/stock.js:1081
msgid "Create New Part"
msgstr "Neues Teil anlegen"
@ -3887,7 +3887,7 @@ msgid "Export Data"
msgstr "Exportieren"
#: part/templates/part/category.html:198
#: stock/templates/stock/location.html:192 templates/js/stock.js:705
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr "Neuen Lagerort anlegen"
@ -4133,7 +4133,7 @@ msgid "Edit"
msgstr "Bearbeiten"
#: part/templates/part/params.html:44 part/templates/part/related.html:44
#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:175
#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:182
msgid "Delete"
msgstr "Löschen"
@ -4678,7 +4678,7 @@ msgid "Result"
msgstr "Ergebnis"
#: report/templates/report/inventree_test_report_base.html:92
#: templates/js/order.js:195 templates/js/stock.js:905
#: templates/js/order.js:195 templates/js/stock.js:909
msgid "Date"
msgstr "Datum"
@ -4701,7 +4701,7 @@ msgid "Moved {n} parts to {loc}"
msgstr "{n} Teile nach {loc} bewegt"
#: stock/forms.py:114 stock/forms.py:406 stock/models.py:473
#: stock/templates/stock/item_base.html:349 templates/js/stock.js:652
#: stock/templates/stock/item_base.html:349 templates/js/stock.js:656
msgid "Expiry Date"
msgstr "Ablaufdatum"
@ -5146,13 +5146,13 @@ msgid "Remove stock"
msgstr "Bestand entfernen"
#: stock/templates/stock/item_base.html:169
msgid "Transfer stock"
msgstr "Bestand verschieben"
#: stock/templates/stock/item_base.html:172
msgid "Serialize stock"
msgstr "Lagerbestand serialisieren"
#: stock/templates/stock/item_base.html:173
msgid "Transfer stock"
msgstr "Bestand verschieben"
#: stock/templates/stock/item_base.html:176
msgid "Assign to customer"
msgstr "zu Kunden zuordnen"
@ -5161,7 +5161,7 @@ msgstr "zu Kunden zuordnen"
msgid "Return to stock"
msgstr "zu Bestand zurückgeben"
#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1218
#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1222
msgid "Uninstall stock item"
msgstr "BestandsObjekt deinstallieren"
@ -5214,7 +5214,7 @@ msgstr "Dieses BestandsObjekt lief ab am"
msgid "This StockItem expires on"
msgstr "Dieses BestandsObjekt läuft ab am"
#: stock/templates/stock/item_base.html:362 templates/js/stock.js:658
#: stock/templates/stock/item_base.html:362 templates/js/stock.js:662
msgid "Last Updated"
msgstr "Zuletzt aktualisiert"
@ -5333,7 +5333,7 @@ msgid "Stock Details"
msgstr "Objekt-Details"
#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263
#: templates/stats.html:52 users/models.py:39
#: templates/stats.html:65 users/models.py:39
msgid "Stock Locations"
msgstr "Bestand-Lagerorte"
@ -5518,7 +5518,7 @@ msgstr "Entfernen"
msgid "Add Stock Items"
msgstr "BestandsObjekte hinzufügen"
#: stock/views.py:1001 users/models.py:171
#: stock/views.py:1001 users/models.py:178
msgid "Add"
msgstr "Hinzufügen"
@ -5648,35 +5648,35 @@ msgstr "Stücklisten erwarten Kontrolle"
msgid "Recently Updated"
msgstr "kürzlich aktualisiert"
#: templates/InvenTree/index.html:143
#: templates/InvenTree/index.html:144
msgid "Expired Stock"
msgstr "abgelaufener Bestand"
#: templates/InvenTree/index.html:144
#: templates/InvenTree/index.html:145
msgid "Stale Stock"
msgstr "Lagerbestand überfällig"
#: templates/InvenTree/index.html:182
#: templates/InvenTree/index.html:183
msgid "Build Orders In Progress"
msgstr "laufende Bauaufträge"
#: templates/InvenTree/index.html:183
#: templates/InvenTree/index.html:184
msgid "Overdue Build Orders"
msgstr "überfällige Bauaufträge"
#: templates/InvenTree/index.html:204
#: templates/InvenTree/index.html:205
msgid "Outstanding Purchase Orders"
msgstr "ausstehende Bestellungen"
#: templates/InvenTree/index.html:205
#: templates/InvenTree/index.html:206
msgid "Overdue Purchase Orders"
msgstr "überfällige Bestellungen"
#: templates/InvenTree/index.html:227
#: templates/InvenTree/index.html:228
msgid "Outstanding Sales Orders"
msgstr "ausstehende Aufträge"
#: templates/InvenTree/index.html:228
#: templates/InvenTree/index.html:229
msgid "Overdue Sales Orders"
msgstr "überfällige Aufträge"
@ -5688,11 +5688,11 @@ msgstr "Suchergebnisse"
msgid "Enter a search query"
msgstr "Eine Sucheanfrage eingeben"
#: templates/InvenTree/search.html:252 templates/js/stock.js:301
#: templates/InvenTree/search.html:252 templates/js/stock.js:300
msgid "Shipped to customer"
msgstr "an Kunde versand"
#: templates/InvenTree/search.html:255 templates/js/stock.js:311
#: templates/InvenTree/search.html:255 templates/js/stock.js:310
msgid "No stock location set"
msgstr "Kein Lagerort gesetzt"
@ -5767,7 +5767,7 @@ msgid "Edit setting"
msgstr "Einstellungen ändern"
#: templates/InvenTree/settings/settings.html:7
#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:76
#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:78
msgid "Settings"
msgstr "Einstellungen"
@ -5869,30 +5869,38 @@ msgid "InvenTree Version"
msgstr "InvenTree-Version"
#: templates/about.html:26
msgid "Up to Date"
msgstr "Aktuell"
#: templates/about.html:28
msgid "Update Available"
msgstr "Aktualisierung verfügbar"
#: templates/about.html:34
msgid "Django Version"
msgstr "Django-Version"
#: templates/about.html:30
#: templates/about.html:41
msgid "Commit Hash"
msgstr "Commit-Hash"
#: templates/about.html:34
#: templates/about.html:48
msgid "Commit Date"
msgstr "Commit-Datum"
#: templates/about.html:38
#: templates/about.html:53
msgid "InvenTree Documentation"
msgstr "InvenTree-Dokumentation"
#: templates/about.html:43
#: templates/about.html:58
msgid "View Code on GitHub"
msgstr "Code auf GitHub ansehen"
#: templates/about.html:48
#: templates/about.html:63
msgid "Get the App"
msgstr "App herunterladen"
#: templates/about.html:53
#: templates/about.html:68
msgid "Submit Bug Report"
msgstr "Fehlerbericht senden"
@ -6092,8 +6100,8 @@ msgstr "Bestand bestellen"
msgid "No builds matching query"
msgstr "Keine Bauaufträge passen zur Anfrage"
#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:512
#: templates/js/stock.js:1250
#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:511
#: templates/js/stock.js:1254
msgid "Select"
msgstr "Auswählen"
@ -6446,115 +6454,115 @@ msgstr "Keine Testergebnisse gefunden"
msgid "Test Date"
msgstr "Testdatum"
#: templates/js/stock.js:293
#: templates/js/stock.js:292
msgid "In production"
msgstr "In Arbeit"
#: templates/js/stock.js:297
#: templates/js/stock.js:296
msgid "Installed in Stock Item"
msgstr "In BestandsObjekt installiert"
#: templates/js/stock.js:305
#: templates/js/stock.js:304
msgid "Assigned to Sales Order"
msgstr "Auftrag zugewiesen"
#: templates/js/stock.js:337
#: templates/js/stock.js:336
msgid "No stock items matching query"
msgstr "Keine zur Anfrage passenden BestandsObjekte"
#: templates/js/stock.js:479
#: templates/js/stock.js:478
msgid "Undefined location"
msgstr "unbekannter Lagerort"
#: templates/js/stock.js:575
#: templates/js/stock.js:579
msgid "Stock item is in production"
msgstr "BestandsObjekt wird produziert"
#: templates/js/stock.js:580
#: templates/js/stock.js:584
msgid "Stock item assigned to sales order"
msgstr "BestandsObjekt wurde Auftrag zugewiesen"
#: templates/js/stock.js:583
#: templates/js/stock.js:587
msgid "Stock item assigned to customer"
msgstr "BestandsObjekt wurde Kunden zugewiesen"
#: templates/js/stock.js:587
#: templates/js/stock.js:591
msgid "Stock item has expired"
msgstr "BestandsObjekt ist abgelaufen"
#: templates/js/stock.js:589
#: templates/js/stock.js:593
msgid "Stock item will expire soon"
msgstr "BestandsObjekt läuft demnächst ab"
#: templates/js/stock.js:593
#: templates/js/stock.js:597
msgid "Stock item has been allocated"
msgstr "BestandsObjekt zugewiesen"
#: templates/js/stock.js:597
#: templates/js/stock.js:601
msgid "Stock item has been installed in another item"
msgstr "BestandsObjekt in anderem Element verbaut"
#: templates/js/stock.js:605
#: templates/js/stock.js:609
msgid "Stock item has been rejected"
msgstr "BestandsObjekt abgewiesen"
#: templates/js/stock.js:609
#: templates/js/stock.js:613
msgid "Stock item is lost"
msgstr "BestandsObjekt verloren"
#: templates/js/stock.js:612
#: templates/js/stock.js:616
msgid "Stock item is destroyed"
msgstr "BestandsObjekt zerstört"
#: templates/js/stock.js:616 templates/js/table_filters.js:116
#: templates/js/stock.js:620 templates/js/table_filters.js:116
msgid "Depleted"
msgstr "gelöscht"
#: templates/js/stock.js:645
#: templates/js/stock.js:649
msgid "Stocktake"
msgstr "Inventur"
#: templates/js/stock.js:821
#: templates/js/stock.js:825
msgid "Stock Status"
msgstr "Bestandsstatus"
#: templates/js/stock.js:836
#: templates/js/stock.js:840
msgid "Set Stock Status"
msgstr "Bestandsstatus setzen"
#: templates/js/stock.js:850
#: templates/js/stock.js:854
msgid "Select Status Code"
msgstr "Status Code setzen"
#: templates/js/stock.js:851
#: templates/js/stock.js:855
msgid "Status code must be selected"
msgstr "Status Code muss ausgewählt werden"
#: templates/js/stock.js:969
#: templates/js/stock.js:973
msgid "No user information"
msgstr "Keine Benutzerinformation"
#: templates/js/stock.js:979
#: templates/js/stock.js:983
msgid "Edit tracking entry"
msgstr "Tracking-Eintrag bearbeiten"
#: templates/js/stock.js:980
#: templates/js/stock.js:984
msgid "Delete tracking entry"
msgstr "Tracking-Eintrag löschen"
#: templates/js/stock.js:1089
#: templates/js/stock.js:1093
msgid "Create New Location"
msgstr "Neuen Lagerort anlegen"
#: templates/js/stock.js:1188
#: templates/js/stock.js:1192
msgid "Serial"
msgstr "Seriennummer"
#: templates/js/stock.js:1281 templates/js/table_filters.js:149
#: templates/js/stock.js:1285 templates/js/table_filters.js:149
msgid "Installed"
msgstr "Installiert"
#: templates/js/stock.js:1306
#: templates/js/stock.js:1310
msgid "Install item"
msgstr "Installiere Objekt"
@ -6780,23 +6788,19 @@ msgstr "Verkaufen"
msgid "Scan Barcode"
msgstr "Barcode scannen"
#: templates/navbar.html:63
msgid "InvenTree server issues detected"
msgstr "InvenTree Server Fehler aufgetreten"
#: templates/navbar.html:69 users/models.py:36
#: templates/navbar.html:71 users/models.py:36
msgid "Admin"
msgstr "Admin"
#: templates/navbar.html:71 templates/registration/logout.html:5
#: templates/navbar.html:73 templates/registration/logout.html:5
msgid "Logout"
msgstr "Ausloggen"
#: templates/navbar.html:73 templates/registration/login.html:89
#: templates/navbar.html:75 templates/registration/login.html:89
msgid "Login"
msgstr "Einloggen"
#: templates/navbar.html:85
#: templates/navbar.html:94
msgid "About InvenTree"
msgstr "Über InvenBaum"
@ -6836,18 +6840,30 @@ msgstr "Server"
msgid "Instance Name"
msgstr "Instanzname"
#: templates/stats.html:18
#: templates/stats.html:19
msgid "Server status"
msgstr "Serverstatus"
#: templates/stats.html:21
#: templates/stats.html:22
msgid "Healthy"
msgstr "Gesund"
#: templates/stats.html:23
#: templates/stats.html:24
msgid "Issues detected"
msgstr "Probleme erkannt"
#: templates/stats.html:30
msgid "Background Worker"
msgstr "Hintergrund-Prozess"
#: templates/stats.html:33
msgid "Operational"
msgstr "Betriebsbereit"
#: templates/stats.html:35
msgid "Not running"
msgstr "Läuft nicht"
#: templates/stock_table.html:14
msgid "Export Stock Information"
msgstr "Aktuellen Bestand exportieren"
@ -6932,38 +6948,41 @@ msgstr "Berechtigungen"
msgid "Important dates"
msgstr "wichtige Daten"
#: users/models.py:158
#: users/models.py:165
msgid "Permission set"
msgstr "Berechtigung geändert"
#: users/models.py:166
#: users/models.py:173
msgid "Group"
msgstr "Gruppe"
#: users/models.py:169
#: users/models.py:176
msgid "View"
msgstr "Ansicht"
#: users/models.py:169
#: users/models.py:176
msgid "Permission to view items"
msgstr "Berechtigung Einträge anzuzeigen"
#: users/models.py:171
#: users/models.py:178
msgid "Permission to add items"
msgstr "Berechtigung Einträge zu erstellen"
#: users/models.py:173
#: users/models.py:180
msgid "Change"
msgstr "Ändern"
#: users/models.py:173
#: users/models.py:180
msgid "Permissions to edit items"
msgstr "Berechtigungen Einträge zu ändern"
#: users/models.py:175
#: users/models.py:182
msgid "Permission to delete items"
msgstr "Berechtigung Einträge zu löschen"
#~ msgid "InvenTree server issues detected"
#~ msgstr "InvenTree Server Fehler aufgetreten"
#, fuzzy
#~| msgid "Stocktake"
#~ msgid "take"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-04-04 20:22+0000\n"
"POT-Creation-Date: 2021-04-11 22:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,15 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: InvenTree/api.py:62
#: InvenTree/api.py:64
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:108
#: InvenTree/api.py:110
msgid "No action specified"
msgstr ""
#: InvenTree/api.py:122
#: InvenTree/api.py:124
msgid "No matching action found"
msgstr ""
@ -124,7 +124,7 @@ msgstr ""
#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1888
#: report/templates/report/inventree_test_report_base.html:91
#: templates/js/stock.js:960
#: templates/js/stock.js:964
msgid "User"
msgstr ""
@ -140,7 +140,7 @@ msgid "Name"
msgstr ""
#: InvenTree/models.py:114 build/models.py:134
#: build/templates/build/detail.html:21 company/models.py:361
#: build/templates/build/detail.html:21 company/models.py:365
#: company/templates/company/detail.html:26
#: company/templates/company/supplier_part_base.html:70
#: company/templates/company/supplier_part_detail.html:31 label/models.py:108
@ -155,8 +155,8 @@ msgstr ""
#: templates/js/build.js:677 templates/js/build.js:944
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:168 templates/js/part.js:251
#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:552
#: templates/js/stock.js:934
#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:554
#: templates/js/stock.js:938
msgid "Description"
msgstr ""
@ -168,31 +168,31 @@ msgstr ""
msgid "parent"
msgstr ""
#: InvenTree/settings.py:430
#: InvenTree/settings.py:480
msgid "English"
msgstr ""
#: InvenTree/settings.py:431
#: InvenTree/settings.py:481
msgid "French"
msgstr ""
#: InvenTree/settings.py:432
#: InvenTree/settings.py:482
msgid "German"
msgstr ""
#: InvenTree/settings.py:433
#: InvenTree/settings.py:483
msgid "Polish"
msgstr ""
#: InvenTree/settings.py:434
#: InvenTree/settings.py:484
msgid "Turkish"
msgstr ""
#: InvenTree/status.py:24
msgid "Celery worker check failed"
#: InvenTree/status.py:57
msgid "Background worker check failed"
msgstr ""
#: InvenTree/status.py:27
#: InvenTree/status.py:60
msgid "InvenTree system health checks failed"
msgstr ""
@ -308,7 +308,7 @@ msgstr ""
msgid "Password fields must match"
msgstr ""
#: InvenTree/views.py:887 templates/navbar.html:83
#: InvenTree/views.py:887 templates/navbar.html:85
msgid "System Information"
msgstr ""
@ -404,7 +404,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:240
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954
#: templates/js/stock.js:952 templates/js/stock.js:1190
#: templates/js/stock.js:956 templates/js/stock.js:1194
msgid "Quantity"
msgstr ""
@ -450,7 +450,7 @@ msgstr ""
#: stock/templates/stock/stock_adjust.html:17
#: templates/InvenTree/search.html:244 templates/js/barcode.js:363
#: templates/js/barcode.js:531 templates/js/build.js:434
#: templates/js/stock.js:637
#: templates/js/stock.js:641
msgid "Location"
msgstr ""
@ -493,7 +493,7 @@ msgstr ""
#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12
#: order/templates/order/so_navbar.html:19
#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:181
#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182
#: templates/InvenTree/search.html:169
#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
msgid "Build Orders"
@ -527,7 +527,7 @@ msgstr ""
#: build/models.py:152 build/templates/build/auto_allocate.html:16
#: build/templates/build/build_base.html:86
#: build/templates/build/detail.html:26 company/models.py:535
#: build/templates/build/detail.html:26 company/models.py:539
#: order/models.py:637 order/models.py:669
#: order/templates/order/order_wizard/select_parts.html:30
#: order/templates/order/purchase_order_detail.html:156
@ -546,8 +546,8 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:681 templates/js/build.js:921
#: templates/js/company.js:138 templates/js/part.js:232
#: templates/js/part.js:337 templates/js/stock.js:524
#: templates/js/stock.js:1262
#: templates/js/part.js:337 templates/js/stock.js:523
#: templates/js/stock.js:1266
msgid "Part"
msgstr ""
@ -663,7 +663,7 @@ msgid "Link to external URL"
msgstr ""
#: build/models.py:261 build/templates/build/navbar.html:59
#: company/models.py:129 company/models.py:368
#: company/models.py:133 company/models.py:372
#: company/templates/company/navbar.html:59
#: company/templates/company/navbar.html:62 order/models.py:123
#: order/models.py:597 order/templates/order/po_navbar.html:29
@ -677,7 +677,7 @@ msgstr ""
#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377
#: stock/models.py:496 stock/models.py:1555 stock/models.py:1665
#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37
#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:667
#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:671
msgid "Notes"
msgstr ""
@ -749,7 +749,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:89
#: stock/templates/stock/item_base.html:324
#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771
#: templates/js/stock.js:923 templates/js/stock.js:1181
#: templates/js/stock.js:927 templates/js/stock.js:1185
msgid "Stock Item"
msgstr ""
@ -908,7 +908,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236
#: templates/js/barcode.js:119 templates/js/build.js:710
#: templates/js/order.js:187 templates/js/order.js:285
#: templates/js/stock.js:624 templates/js/stock.js:1198
#: templates/js/stock.js:628 templates/js/stock.js:1202
msgid "Status"
msgstr ""
@ -1042,8 +1042,8 @@ msgid "Destination location not specified"
msgstr ""
#: build/templates/build/detail.html:70
#: stock/templates/stock/item_base.html:288 templates/js/stock.js:632
#: templates/js/stock.js:1205 templates/js/table_filters.js:85
#: stock/templates/stock/item_base.html:288 templates/js/stock.js:636
#: templates/js/stock.js:1209 templates/js/table_filters.js:85
#: templates/js/table_filters.js:179
msgid "Batch"
msgstr ""
@ -1304,7 +1304,7 @@ msgstr ""
msgid "String descriptor for the server instance"
msgstr ""
#: common/models.py:62 company/models.py:96 company/models.py:97
#: common/models.py:62 company/models.py:95 company/models.py:96
msgid "Company name"
msgstr ""
@ -1652,12 +1652,12 @@ msgstr ""
msgid "Supplied value must be a boolean"
msgstr ""
#: company/forms.py:37 company/models.py:139
#: company/forms.py:37 company/models.py:143
#: company/templates/company/detail.html:40
msgid "Currency"
msgstr ""
#: company/forms.py:38 company/models.py:141
#: company/forms.py:38 company/models.py:145
msgid "Default currency used for this company"
msgstr ""
@ -1677,104 +1677,104 @@ msgstr ""
msgid "Single quantity price"
msgstr ""
#: company/models.py:99
#: company/models.py:100
msgid "Company description"
msgstr ""
#: company/models.py:99
#: company/models.py:101
msgid "Description of the company"
msgstr ""
#: company/models.py:101 company/templates/company/company_base.html:70
#: company/models.py:105 company/templates/company/company_base.html:70
#: company/templates/company/detail.html:31 templates/js/company.js:60
msgid "Website"
msgstr ""
#: company/models.py:101
#: company/models.py:105
msgid "Company website URL"
msgstr ""
#: company/models.py:104 company/templates/company/company_base.html:77
#: company/models.py:108 company/templates/company/company_base.html:77
msgid "Address"
msgstr ""
#: company/models.py:105
#: company/models.py:109
msgid "Company address"
msgstr ""
#: company/models.py:108
#: company/models.py:112
msgid "Phone number"
msgstr ""
#: company/models.py:109
#: company/models.py:113
msgid "Contact phone number"
msgstr ""
#: company/models.py:112 company/templates/company/company_base.html:91
#: company/models.py:116 company/templates/company/company_base.html:91
msgid "Email"
msgstr ""
#: company/models.py:112
#: company/models.py:116
msgid "Contact email address"
msgstr ""
#: company/models.py:115 company/templates/company/company_base.html:98
#: company/models.py:119 company/templates/company/company_base.html:98
msgid "Contact"
msgstr ""
#: company/models.py:116
#: company/models.py:120
msgid "Point of contact"
msgstr ""
#: company/models.py:118 company/models.py:355 order/models.py:103
#: company/models.py:122 company/models.py:359 order/models.py:103
#: part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: stock/models.py:1557 templates/js/company.js:208 templates/js/part.js:430
msgid "Link"
msgstr ""
#: company/models.py:118
#: company/models.py:122
msgid "Link to external company information"
msgstr ""
#: company/models.py:126 part/models.py:753
#: company/models.py:130 part/models.py:753
msgid "Image"
msgstr ""
#: company/models.py:131
#: company/models.py:135
msgid "is customer"
msgstr ""
#: company/models.py:131
#: company/models.py:135
msgid "Do you sell items to this company?"
msgstr ""
#: company/models.py:133
#: company/models.py:137
msgid "is supplier"
msgstr ""
#: company/models.py:133
#: company/models.py:137
msgid "Do you purchase items from this company?"
msgstr ""
#: company/models.py:135
#: company/models.py:139
msgid "is manufacturer"
msgstr ""
#: company/models.py:135
#: company/models.py:139
msgid "Does this company manufacture parts?"
msgstr ""
#: company/models.py:315 stock/models.py:371
#: company/models.py:319 stock/models.py:371
#: stock/templates/stock/item_base.html:220
msgid "Base Part"
msgstr ""
#: company/models.py:319 order/views.py:1372
#: company/models.py:323 order/views.py:1372
msgid "Select part"
msgstr ""
#: company/models.py:325 company/templates/company/detail.html:60
#: company/models.py:329 company/templates/company/detail.html:60
#: company/templates/company/supplier_part_base.html:83
#: company/templates/company/supplier_part_detail.html:25 order/models.py:190
#: order/templates/order/order_base.html:92
@ -1784,80 +1784,80 @@ msgstr ""
msgid "Supplier"
msgstr ""
#: company/models.py:326
#: company/models.py:330
msgid "Select supplier"
msgstr ""
#: company/models.py:331 company/templates/company/supplier_part_base.html:87
#: company/models.py:335 company/templates/company/supplier_part_base.html:87
#: company/templates/company/supplier_part_detail.html:26
#: order/templates/order/purchase_order_detail.html:174 part/bom.py:171
msgid "SKU"
msgstr ""
#: company/models.py:332
#: company/models.py:336
msgid "Supplier stock keeping unit"
msgstr ""
#: company/models.py:342 company/templates/company/detail.html:55
#: company/models.py:346 company/templates/company/detail.html:55
#: company/templates/company/supplier_part_base.html:93
#: company/templates/company/supplier_part_detail.html:34 part/bom.py:172
#: templates/js/company.js:44 templates/js/company.js:188
msgid "Manufacturer"
msgstr ""
#: company/models.py:343
#: company/models.py:347
msgid "Select manufacturer"
msgstr ""
#: company/models.py:349 company/templates/company/supplier_part_base.html:99
#: company/models.py:353 company/templates/company/supplier_part_base.html:99
#: company/templates/company/supplier_part_detail.html:35
#: order/templates/order/purchase_order_detail.html:183 part/bom.py:173
#: templates/js/company.js:204
msgid "MPN"
msgstr ""
#: company/models.py:350
#: company/models.py:354
msgid "Manufacturer part number"
msgstr ""
#: company/models.py:356
#: company/models.py:360
msgid "URL for external supplier part link"
msgstr ""
#: company/models.py:362
#: company/models.py:366
msgid "Supplier part description"
msgstr ""
#: company/models.py:367 company/templates/company/supplier_part_base.html:113
#: company/models.py:371 company/templates/company/supplier_part_base.html:113
#: company/templates/company/supplier_part_detail.html:38 part/models.py:2170
#: report/templates/report/inventree_po_report.html:93
#: report/templates/report/inventree_so_report.html:93
msgid "Note"
msgstr ""
#: company/models.py:371
#: company/models.py:375
msgid "base cost"
msgstr ""
#: company/models.py:371
#: company/models.py:375
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
#: company/models.py:373 company/templates/company/supplier_part_base.html:106
#: company/models.py:377 company/templates/company/supplier_part_base.html:106
#: stock/models.py:395 stock/templates/stock/item_base.html:295
#: templates/js/stock.js:663
#: templates/js/stock.js:667
msgid "Packaging"
msgstr ""
#: company/models.py:373
#: company/models.py:377
msgid "Part packaging"
msgstr ""
#: company/models.py:375
#: company/models.py:379
msgid "multiple"
msgstr ""
#: company/models.py:375
#: company/models.py:379
msgid "Order multiple"
msgstr ""
@ -1950,7 +1950,7 @@ msgstr ""
#: company/templates/company/detail_part.html:21
#: order/templates/order/purchase_order_detail.html:74
#: part/templates/part/supplier.html:17 templates/js/stock.js:1082
#: part/templates/part/supplier.html:17 templates/js/stock.js:1086
msgid "New Supplier Part"
msgstr ""
@ -1974,7 +1974,7 @@ msgstr ""
#: company/templates/company/detail_part.html:66
#: part/templates/part/bom.html:159 part/templates/part/category.html:118
#: templates/js/stock.js:1076
#: templates/js/stock.js:1080
msgid "New Part"
msgstr ""
@ -2029,14 +2029,14 @@ msgstr ""
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113
#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23
#: templates/stats.html:35 templates/stats.html:44 users/models.py:38
#: templates/stats.html:48 templates/stats.html:57 users/models.py:38
msgid "Parts"
msgstr ""
#: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33
#: stock/templates/stock/location.html:100
#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182
#: templates/stats.html:48 templates/stats.html:57 users/models.py:40
#: templates/stats.html:61 templates/stats.html:70 users/models.py:40
msgid "Stock Items"
msgstr ""
@ -2048,7 +2048,7 @@ msgstr ""
#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180
#: templates/InvenTree/search.html:216
#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172
#: templates/js/part.js:397 templates/js/stock.js:559 templates/navbar.html:26
#: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26
msgid "Stock"
msgstr ""
@ -2059,7 +2059,7 @@ msgstr ""
#: order/templates/order/sales_orders.html:8
#: order/templates/order/sales_orders.html:13
#: part/templates/part/navbar.html:92 part/templates/part/navbar.html:95
#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:226
#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227
#: templates/InvenTree/search.html:330
#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
#: users/models.py:43
@ -2071,7 +2071,7 @@ msgstr ""
#: order/templates/order/purchase_orders.html:8
#: order/templates/order/purchase_orders.html:13
#: part/templates/part/navbar.html:78 part/templates/part/navbar.html:81
#: part/templates/part/orders.html:10 templates/InvenTree/index.html:203
#: part/templates/part/orders.html:10 templates/InvenTree/index.html:204
#: templates/InvenTree/search.html:300
#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
#: users/models.py:42
@ -2263,7 +2263,7 @@ msgstr ""
msgid "Edit Supplier Part"
msgstr ""
#: company/views.py:378 templates/js/stock.js:1083
#: company/views.py:378 templates/js/stock.js:1087
msgid "Create new Supplier Part"
msgstr ""
@ -2713,8 +2713,8 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:45
#: order/templates/order/purchase_order_detail.html:125
#: part/templates/part/category.html:197 part/templates/part/category.html:239
#: stock/templates/stock/location.html:191 templates/js/stock.js:704
#: templates/js/stock.js:1088
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1092
msgid "New Location"
msgstr ""
@ -3242,7 +3242,7 @@ msgstr ""
#: part/models.py:83 part/templates/part/category.html:19
#: part/templates/part/category.html:90 part/templates/part/category.html:141
#: templates/InvenTree/search.html:126 templates/stats.html:39
#: templates/InvenTree/search.html:126 templates/stats.html:52
#: users/models.py:37
msgid "Part Categories"
msgstr ""
@ -3675,7 +3675,7 @@ msgid "All selected BOM items will be deleted"
msgstr ""
#: part/templates/part/bom.html:160 part/views.py:584
#: templates/js/stock.js:1077
#: templates/js/stock.js:1081
msgid "Create New Part"
msgstr ""
@ -3844,7 +3844,7 @@ msgid "Export Data"
msgstr ""
#: part/templates/part/category.html:198
#: stock/templates/stock/location.html:192 templates/js/stock.js:705
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
@ -4085,7 +4085,7 @@ msgid "Edit"
msgstr ""
#: part/templates/part/params.html:44 part/templates/part/related.html:44
#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:175
#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:182
msgid "Delete"
msgstr ""
@ -4628,7 +4628,7 @@ msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:92
#: templates/js/order.js:195 templates/js/stock.js:905
#: templates/js/order.js:195 templates/js/stock.js:909
msgid "Date"
msgstr ""
@ -4651,7 +4651,7 @@ msgid "Moved {n} parts to {loc}"
msgstr ""
#: stock/forms.py:114 stock/forms.py:406 stock/models.py:473
#: stock/templates/stock/item_base.html:349 templates/js/stock.js:652
#: stock/templates/stock/item_base.html:349 templates/js/stock.js:656
msgid "Expiry Date"
msgstr ""
@ -5085,11 +5085,11 @@ msgid "Remove stock"
msgstr ""
#: stock/templates/stock/item_base.html:169
msgid "Transfer stock"
msgid "Serialize stock"
msgstr ""
#: stock/templates/stock/item_base.html:172
msgid "Serialize stock"
#: stock/templates/stock/item_base.html:173
msgid "Transfer stock"
msgstr ""
#: stock/templates/stock/item_base.html:176
@ -5100,7 +5100,7 @@ msgstr ""
msgid "Return to stock"
msgstr ""
#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1218
#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1222
msgid "Uninstall stock item"
msgstr ""
@ -5153,7 +5153,7 @@ msgstr ""
msgid "This StockItem expires on"
msgstr ""
#: stock/templates/stock/item_base.html:362 templates/js/stock.js:658
#: stock/templates/stock/item_base.html:362 templates/js/stock.js:662
msgid "Last Updated"
msgstr ""
@ -5266,7 +5266,7 @@ msgid "Stock Details"
msgstr ""
#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263
#: templates/stats.html:52 users/models.py:39
#: templates/stats.html:65 users/models.py:39
msgid "Stock Locations"
msgstr ""
@ -5451,7 +5451,7 @@ msgstr ""
msgid "Add Stock Items"
msgstr ""
#: stock/views.py:1001 users/models.py:171
#: stock/views.py:1001 users/models.py:178
msgid "Add"
msgstr ""
@ -5581,35 +5581,35 @@ msgstr ""
msgid "Recently Updated"
msgstr ""
#: templates/InvenTree/index.html:143
#: templates/InvenTree/index.html:144
msgid "Expired Stock"
msgstr ""
#: templates/InvenTree/index.html:144
#: templates/InvenTree/index.html:145
msgid "Stale Stock"
msgstr ""
#: templates/InvenTree/index.html:182
#: templates/InvenTree/index.html:183
msgid "Build Orders In Progress"
msgstr ""
#: templates/InvenTree/index.html:183
#: templates/InvenTree/index.html:184
msgid "Overdue Build Orders"
msgstr ""
#: templates/InvenTree/index.html:204
#: templates/InvenTree/index.html:205
msgid "Outstanding Purchase Orders"
msgstr ""
#: templates/InvenTree/index.html:205
#: templates/InvenTree/index.html:206
msgid "Overdue Purchase Orders"
msgstr ""
#: templates/InvenTree/index.html:227
#: templates/InvenTree/index.html:228
msgid "Outstanding Sales Orders"
msgstr ""
#: templates/InvenTree/index.html:228
#: templates/InvenTree/index.html:229
msgid "Overdue Sales Orders"
msgstr ""
@ -5621,11 +5621,11 @@ msgstr ""
msgid "Enter a search query"
msgstr ""
#: templates/InvenTree/search.html:252 templates/js/stock.js:301
#: templates/InvenTree/search.html:252 templates/js/stock.js:300
msgid "Shipped to customer"
msgstr ""
#: templates/InvenTree/search.html:255 templates/js/stock.js:311
#: templates/InvenTree/search.html:255 templates/js/stock.js:310
msgid "No stock location set"
msgstr ""
@ -5700,7 +5700,7 @@ msgid "Edit setting"
msgstr ""
#: templates/InvenTree/settings/settings.html:7
#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:76
#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:78
msgid "Settings"
msgstr ""
@ -5797,30 +5797,38 @@ msgid "InvenTree Version"
msgstr ""
#: templates/about.html:26
msgid "Django Version"
msgid "Up to Date"
msgstr ""
#: templates/about.html:30
msgid "Commit Hash"
#: templates/about.html:28
msgid "Update Available"
msgstr ""
#: templates/about.html:34
msgid "Commit Date"
msgid "Django Version"
msgstr ""
#: templates/about.html:38
msgid "InvenTree Documentation"
msgstr ""
#: templates/about.html:43
msgid "View Code on GitHub"
#: templates/about.html:41
msgid "Commit Hash"
msgstr ""
#: templates/about.html:48
msgid "Get the App"
msgid "Commit Date"
msgstr ""
#: templates/about.html:53
msgid "InvenTree Documentation"
msgstr ""
#: templates/about.html:58
msgid "View Code on GitHub"
msgstr ""
#: templates/about.html:63
msgid "Get the App"
msgstr ""
#: templates/about.html:68
msgid "Submit Bug Report"
msgstr ""
@ -6018,8 +6026,8 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:512
#: templates/js/stock.js:1250
#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:511
#: templates/js/stock.js:1254
msgid "Select"
msgstr ""
@ -6371,115 +6379,115 @@ msgstr ""
msgid "Test Date"
msgstr ""
#: templates/js/stock.js:293
#: templates/js/stock.js:292
msgid "In production"
msgstr ""
#: templates/js/stock.js:297
#: templates/js/stock.js:296
msgid "Installed in Stock Item"
msgstr ""
#: templates/js/stock.js:305
#: templates/js/stock.js:304
msgid "Assigned to Sales Order"
msgstr ""
#: templates/js/stock.js:337
#: templates/js/stock.js:336
msgid "No stock items matching query"
msgstr ""
#: templates/js/stock.js:479
#: templates/js/stock.js:478
msgid "Undefined location"
msgstr ""
#: templates/js/stock.js:575
#: templates/js/stock.js:579
msgid "Stock item is in production"
msgstr ""
#: templates/js/stock.js:580
#: templates/js/stock.js:584
msgid "Stock item assigned to sales order"
msgstr ""
#: templates/js/stock.js:583
#: templates/js/stock.js:587
msgid "Stock item assigned to customer"
msgstr ""
#: templates/js/stock.js:587
#: templates/js/stock.js:591
msgid "Stock item has expired"
msgstr ""
#: templates/js/stock.js:589
#: templates/js/stock.js:593
msgid "Stock item will expire soon"
msgstr ""
#: templates/js/stock.js:593
#: templates/js/stock.js:597
msgid "Stock item has been allocated"
msgstr ""
#: templates/js/stock.js:597
#: templates/js/stock.js:601
msgid "Stock item has been installed in another item"
msgstr ""
#: templates/js/stock.js:605
#: templates/js/stock.js:609
msgid "Stock item has been rejected"
msgstr ""
#: templates/js/stock.js:609
#: templates/js/stock.js:613
msgid "Stock item is lost"
msgstr ""
#: templates/js/stock.js:612
#: templates/js/stock.js:616
msgid "Stock item is destroyed"
msgstr ""
#: templates/js/stock.js:616 templates/js/table_filters.js:116
#: templates/js/stock.js:620 templates/js/table_filters.js:116
msgid "Depleted"
msgstr ""
#: templates/js/stock.js:645
#: templates/js/stock.js:649
msgid "Stocktake"
msgstr ""
#: templates/js/stock.js:821
#: templates/js/stock.js:825
msgid "Stock Status"
msgstr ""
#: templates/js/stock.js:836
#: templates/js/stock.js:840
msgid "Set Stock Status"
msgstr ""
#: templates/js/stock.js:850
#: templates/js/stock.js:854
msgid "Select Status Code"
msgstr ""
#: templates/js/stock.js:851
#: templates/js/stock.js:855
msgid "Status code must be selected"
msgstr ""
#: templates/js/stock.js:969
#: templates/js/stock.js:973
msgid "No user information"
msgstr ""
#: templates/js/stock.js:979
#: templates/js/stock.js:983
msgid "Edit tracking entry"
msgstr ""
#: templates/js/stock.js:980
#: templates/js/stock.js:984
msgid "Delete tracking entry"
msgstr ""
#: templates/js/stock.js:1089
#: templates/js/stock.js:1093
msgid "Create New Location"
msgstr ""
#: templates/js/stock.js:1188
#: templates/js/stock.js:1192
msgid "Serial"
msgstr ""
#: templates/js/stock.js:1281 templates/js/table_filters.js:149
#: templates/js/stock.js:1285 templates/js/table_filters.js:149
msgid "Installed"
msgstr ""
#: templates/js/stock.js:1306
#: templates/js/stock.js:1310
msgid "Install item"
msgstr ""
@ -6705,23 +6713,19 @@ msgstr ""
msgid "Scan Barcode"
msgstr ""
#: templates/navbar.html:63
msgid "InvenTree server issues detected"
msgstr ""
#: templates/navbar.html:69 users/models.py:36
#: templates/navbar.html:71 users/models.py:36
msgid "Admin"
msgstr ""
#: templates/navbar.html:71 templates/registration/logout.html:5
#: templates/navbar.html:73 templates/registration/logout.html:5
msgid "Logout"
msgstr ""
#: templates/navbar.html:73 templates/registration/login.html:89
#: templates/navbar.html:75 templates/registration/login.html:89
msgid "Login"
msgstr ""
#: templates/navbar.html:85
#: templates/navbar.html:94
msgid "About InvenTree"
msgstr ""
@ -6761,18 +6765,30 @@ msgstr ""
msgid "Instance Name"
msgstr ""
#: templates/stats.html:18
#: templates/stats.html:19
msgid "Server status"
msgstr ""
#: templates/stats.html:21
#: templates/stats.html:22
msgid "Healthy"
msgstr ""
#: templates/stats.html:23
#: templates/stats.html:24
msgid "Issues detected"
msgstr ""
#: templates/stats.html:30
msgid "Background Worker"
msgstr ""
#: templates/stats.html:33
msgid "Operational"
msgstr ""
#: templates/stats.html:35
msgid "Not running"
msgstr ""
#: templates/stock_table.html:14
msgid "Export Stock Information"
msgstr ""
@ -6857,34 +6873,34 @@ msgstr ""
msgid "Important dates"
msgstr ""
#: users/models.py:158
#: users/models.py:165
msgid "Permission set"
msgstr ""
#: users/models.py:166
#: users/models.py:173
msgid "Group"
msgstr ""
#: users/models.py:169
#: users/models.py:176
msgid "View"
msgstr ""
#: users/models.py:169
#: users/models.py:176
msgid "Permission to view items"
msgstr ""
#: users/models.py:171
#: users/models.py:178
msgid "Permission to add items"
msgstr ""
#: users/models.py:173
#: users/models.py:180
msgid "Change"
msgstr ""
#: users/models.py:173
#: users/models.py:180
msgid "Permissions to edit items"
msgstr ""
#: users/models.py:175
#: users/models.py:182
msgid "Permission to delete items"
msgstr ""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-04-04 20:22+0000\n"
"POT-Creation-Date: 2021-04-11 22:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,15 +18,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: InvenTree/api.py:62
#: InvenTree/api.py:64
msgid "API endpoint not found"
msgstr ""
#: InvenTree/api.py:108
#: InvenTree/api.py:110
msgid "No action specified"
msgstr ""
#: InvenTree/api.py:122
#: InvenTree/api.py:124
msgid "No matching action found"
msgstr ""
@ -124,7 +124,7 @@ msgstr ""
#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1888
#: report/templates/report/inventree_test_report_base.html:91
#: templates/js/stock.js:960
#: templates/js/stock.js:964
msgid "User"
msgstr ""
@ -140,7 +140,7 @@ msgid "Name"
msgstr ""
#: InvenTree/models.py:114 build/models.py:134
#: build/templates/build/detail.html:21 company/models.py:361
#: build/templates/build/detail.html:21 company/models.py:365
#: company/templates/company/detail.html:26
#: company/templates/company/supplier_part_base.html:70
#: company/templates/company/supplier_part_detail.html:31 label/models.py:108
@ -155,8 +155,8 @@ msgstr ""
#: templates/js/build.js:677 templates/js/build.js:944
#: templates/js/company.js:56 templates/js/order.js:183
#: templates/js/order.js:280 templates/js/part.js:168 templates/js/part.js:251
#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:552
#: templates/js/stock.js:934
#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:554
#: templates/js/stock.js:938
msgid "Description"
msgstr ""
@ -168,31 +168,31 @@ msgstr ""
msgid "parent"
msgstr ""
#: InvenTree/settings.py:430
#: InvenTree/settings.py:480
msgid "English"
msgstr ""
#: InvenTree/settings.py:431
#: InvenTree/settings.py:481
msgid "French"
msgstr ""
#: InvenTree/settings.py:432
#: InvenTree/settings.py:482
msgid "German"
msgstr ""
#: InvenTree/settings.py:433
#: InvenTree/settings.py:483
msgid "Polish"
msgstr ""
#: InvenTree/settings.py:434
#: InvenTree/settings.py:484
msgid "Turkish"
msgstr ""
#: InvenTree/status.py:24
msgid "Celery worker check failed"
#: InvenTree/status.py:57
msgid "Background worker check failed"
msgstr ""
#: InvenTree/status.py:27
#: InvenTree/status.py:60
msgid "InvenTree system health checks failed"
msgstr ""
@ -308,7 +308,7 @@ msgstr ""
msgid "Password fields must match"
msgstr ""
#: InvenTree/views.py:887 templates/navbar.html:83
#: InvenTree/views.py:887 templates/navbar.html:85
msgid "System Information"
msgstr ""
@ -404,7 +404,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:240
#: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954
#: templates/js/stock.js:952 templates/js/stock.js:1190
#: templates/js/stock.js:956 templates/js/stock.js:1194
msgid "Quantity"
msgstr ""
@ -450,7 +450,7 @@ msgstr ""
#: stock/templates/stock/stock_adjust.html:17
#: templates/InvenTree/search.html:244 templates/js/barcode.js:363
#: templates/js/barcode.js:531 templates/js/build.js:434
#: templates/js/stock.js:637
#: templates/js/stock.js:641
msgid "Location"
msgstr ""
@ -493,7 +493,7 @@ msgstr ""
#: build/templates/build/index.html:15 order/templates/order/so_builds.html:12
#: order/templates/order/so_navbar.html:19
#: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:181
#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182
#: templates/InvenTree/search.html:169
#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
msgid "Build Orders"
@ -527,7 +527,7 @@ msgstr ""
#: build/models.py:152 build/templates/build/auto_allocate.html:16
#: build/templates/build/build_base.html:86
#: build/templates/build/detail.html:26 company/models.py:535
#: build/templates/build/detail.html:26 company/models.py:539
#: order/models.py:637 order/models.py:669
#: order/templates/order/order_wizard/select_parts.html:30
#: order/templates/order/purchase_order_detail.html:156
@ -546,8 +546,8 @@ msgstr ""
#: templates/js/barcode.js:362 templates/js/bom.js:163
#: templates/js/build.js:681 templates/js/build.js:921
#: templates/js/company.js:138 templates/js/part.js:232
#: templates/js/part.js:337 templates/js/stock.js:524
#: templates/js/stock.js:1262
#: templates/js/part.js:337 templates/js/stock.js:523
#: templates/js/stock.js:1266
msgid "Part"
msgstr ""
@ -663,7 +663,7 @@ msgid "Link to external URL"
msgstr ""
#: build/models.py:261 build/templates/build/navbar.html:59
#: company/models.py:129 company/models.py:368
#: company/models.py:133 company/models.py:372
#: company/templates/company/navbar.html:59
#: company/templates/company/navbar.html:62 order/models.py:123
#: order/models.py:597 order/templates/order/po_navbar.html:29
@ -677,7 +677,7 @@ msgstr ""
#: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377
#: stock/models.py:496 stock/models.py:1555 stock/models.py:1665
#: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37
#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:667
#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:671
msgid "Notes"
msgstr ""
@ -749,7 +749,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:89
#: stock/templates/stock/item_base.html:324
#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771
#: templates/js/stock.js:923 templates/js/stock.js:1181
#: templates/js/stock.js:927 templates/js/stock.js:1185
msgid "Stock Item"
msgstr ""
@ -908,7 +908,7 @@ msgstr ""
#: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236
#: templates/js/barcode.js:119 templates/js/build.js:710
#: templates/js/order.js:187 templates/js/order.js:285
#: templates/js/stock.js:624 templates/js/stock.js:1198
#: templates/js/stock.js:628 templates/js/stock.js:1202
msgid "Status"
msgstr ""
@ -1042,8 +1042,8 @@ msgid "Destination location not specified"
msgstr ""
#: build/templates/build/detail.html:70
#: stock/templates/stock/item_base.html:288 templates/js/stock.js:632
#: templates/js/stock.js:1205 templates/js/table_filters.js:85
#: stock/templates/stock/item_base.html:288 templates/js/stock.js:636
#: templates/js/stock.js:1209 templates/js/table_filters.js:85
#: templates/js/table_filters.js:179
msgid "Batch"
msgstr ""
@ -1304,7 +1304,7 @@ msgstr ""
msgid "String descriptor for the server instance"
msgstr ""
#: common/models.py:62 company/models.py:96 company/models.py:97
#: common/models.py:62 company/models.py:95 company/models.py:96
msgid "Company name"
msgstr ""
@ -1652,12 +1652,12 @@ msgstr ""
msgid "Supplied value must be a boolean"
msgstr ""
#: company/forms.py:37 company/models.py:139
#: company/forms.py:37 company/models.py:143
#: company/templates/company/detail.html:40
msgid "Currency"
msgstr ""
#: company/forms.py:38 company/models.py:141
#: company/forms.py:38 company/models.py:145
msgid "Default currency used for this company"
msgstr ""
@ -1677,104 +1677,104 @@ msgstr ""
msgid "Single quantity price"
msgstr ""
#: company/models.py:99
#: company/models.py:100
msgid "Company description"
msgstr ""
#: company/models.py:99
#: company/models.py:101
msgid "Description of the company"
msgstr ""
#: company/models.py:101 company/templates/company/company_base.html:70
#: company/models.py:105 company/templates/company/company_base.html:70
#: company/templates/company/detail.html:31 templates/js/company.js:60
msgid "Website"
msgstr ""
#: company/models.py:101
#: company/models.py:105
msgid "Company website URL"
msgstr ""
#: company/models.py:104 company/templates/company/company_base.html:77
#: company/models.py:108 company/templates/company/company_base.html:77
msgid "Address"
msgstr ""
#: company/models.py:105
#: company/models.py:109
msgid "Company address"
msgstr ""
#: company/models.py:108
#: company/models.py:112
msgid "Phone number"
msgstr ""
#: company/models.py:109
#: company/models.py:113
msgid "Contact phone number"
msgstr ""
#: company/models.py:112 company/templates/company/company_base.html:91
#: company/models.py:116 company/templates/company/company_base.html:91
msgid "Email"
msgstr ""
#: company/models.py:112
#: company/models.py:116
msgid "Contact email address"
msgstr ""
#: company/models.py:115 company/templates/company/company_base.html:98
#: company/models.py:119 company/templates/company/company_base.html:98
msgid "Contact"
msgstr ""
#: company/models.py:116
#: company/models.py:120
msgid "Point of contact"
msgstr ""
#: company/models.py:118 company/models.py:355 order/models.py:103
#: company/models.py:122 company/models.py:359 order/models.py:103
#: part/models.py:743
#: report/templates/report/inventree_build_order_base.html:165
#: stock/models.py:1557 templates/js/company.js:208 templates/js/part.js:430
msgid "Link"
msgstr ""
#: company/models.py:118
#: company/models.py:122
msgid "Link to external company information"
msgstr ""
#: company/models.py:126 part/models.py:753
#: company/models.py:130 part/models.py:753
msgid "Image"
msgstr ""
#: company/models.py:131
#: company/models.py:135
msgid "is customer"
msgstr ""
#: company/models.py:131
#: company/models.py:135
msgid "Do you sell items to this company?"
msgstr ""
#: company/models.py:133
#: company/models.py:137
msgid "is supplier"
msgstr ""
#: company/models.py:133
#: company/models.py:137
msgid "Do you purchase items from this company?"
msgstr ""
#: company/models.py:135
#: company/models.py:139
msgid "is manufacturer"
msgstr ""
#: company/models.py:135
#: company/models.py:139
msgid "Does this company manufacture parts?"
msgstr ""
#: company/models.py:315 stock/models.py:371
#: company/models.py:319 stock/models.py:371
#: stock/templates/stock/item_base.html:220
msgid "Base Part"
msgstr ""
#: company/models.py:319 order/views.py:1372
#: company/models.py:323 order/views.py:1372
msgid "Select part"
msgstr ""
#: company/models.py:325 company/templates/company/detail.html:60
#: company/models.py:329 company/templates/company/detail.html:60
#: company/templates/company/supplier_part_base.html:83
#: company/templates/company/supplier_part_detail.html:25 order/models.py:190
#: order/templates/order/order_base.html:92
@ -1784,80 +1784,80 @@ msgstr ""
msgid "Supplier"
msgstr ""
#: company/models.py:326
#: company/models.py:330
msgid "Select supplier"
msgstr ""
#: company/models.py:331 company/templates/company/supplier_part_base.html:87
#: company/models.py:335 company/templates/company/supplier_part_base.html:87
#: company/templates/company/supplier_part_detail.html:26
#: order/templates/order/purchase_order_detail.html:174 part/bom.py:171
msgid "SKU"
msgstr ""
#: company/models.py:332
#: company/models.py:336
msgid "Supplier stock keeping unit"
msgstr ""
#: company/models.py:342 company/templates/company/detail.html:55
#: company/models.py:346 company/templates/company/detail.html:55
#: company/templates/company/supplier_part_base.html:93
#: company/templates/company/supplier_part_detail.html:34 part/bom.py:172
#: templates/js/company.js:44 templates/js/company.js:188
msgid "Manufacturer"
msgstr ""
#: company/models.py:343
#: company/models.py:347
msgid "Select manufacturer"
msgstr ""
#: company/models.py:349 company/templates/company/supplier_part_base.html:99
#: company/models.py:353 company/templates/company/supplier_part_base.html:99
#: company/templates/company/supplier_part_detail.html:35
#: order/templates/order/purchase_order_detail.html:183 part/bom.py:173
#: templates/js/company.js:204
msgid "MPN"
msgstr ""
#: company/models.py:350
#: company/models.py:354
msgid "Manufacturer part number"
msgstr ""
#: company/models.py:356
#: company/models.py:360
msgid "URL for external supplier part link"
msgstr ""
#: company/models.py:362
#: company/models.py:366
msgid "Supplier part description"
msgstr ""
#: company/models.py:367 company/templates/company/supplier_part_base.html:113
#: company/models.py:371 company/templates/company/supplier_part_base.html:113
#: company/templates/company/supplier_part_detail.html:38 part/models.py:2170
#: report/templates/report/inventree_po_report.html:93
#: report/templates/report/inventree_so_report.html:93
msgid "Note"
msgstr ""
#: company/models.py:371
#: company/models.py:375
msgid "base cost"
msgstr ""
#: company/models.py:371
#: company/models.py:375
msgid "Minimum charge (e.g. stocking fee)"
msgstr ""
#: company/models.py:373 company/templates/company/supplier_part_base.html:106
#: company/models.py:377 company/templates/company/supplier_part_base.html:106
#: stock/models.py:395 stock/templates/stock/item_base.html:295
#: templates/js/stock.js:663
#: templates/js/stock.js:667
msgid "Packaging"
msgstr ""
#: company/models.py:373
#: company/models.py:377
msgid "Part packaging"
msgstr ""
#: company/models.py:375
#: company/models.py:379
msgid "multiple"
msgstr ""
#: company/models.py:375
#: company/models.py:379
msgid "Order multiple"
msgstr ""
@ -1950,7 +1950,7 @@ msgstr ""
#: company/templates/company/detail_part.html:21
#: order/templates/order/purchase_order_detail.html:74
#: part/templates/part/supplier.html:17 templates/js/stock.js:1082
#: part/templates/part/supplier.html:17 templates/js/stock.js:1086
msgid "New Supplier Part"
msgstr ""
@ -1974,7 +1974,7 @@ msgstr ""
#: company/templates/company/detail_part.html:66
#: part/templates/part/bom.html:159 part/templates/part/category.html:118
#: templates/js/stock.js:1076
#: templates/js/stock.js:1080
msgid "New Part"
msgstr ""
@ -2029,14 +2029,14 @@ msgstr ""
#: part/templates/part/category_partlist.html:10
#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113
#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23
#: templates/stats.html:35 templates/stats.html:44 users/models.py:38
#: templates/stats.html:48 templates/stats.html:57 users/models.py:38
msgid "Parts"
msgstr ""
#: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33
#: stock/templates/stock/location.html:100
#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182
#: templates/stats.html:48 templates/stats.html:57 users/models.py:40
#: templates/stats.html:61 templates/stats.html:70 users/models.py:40
msgid "Stock Items"
msgstr ""
@ -2048,7 +2048,7 @@ msgstr ""
#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180
#: templates/InvenTree/search.html:216
#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172
#: templates/js/part.js:397 templates/js/stock.js:559 templates/navbar.html:26
#: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26
msgid "Stock"
msgstr ""
@ -2059,7 +2059,7 @@ msgstr ""
#: order/templates/order/sales_orders.html:8
#: order/templates/order/sales_orders.html:13
#: part/templates/part/navbar.html:92 part/templates/part/navbar.html:95
#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:226
#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227
#: templates/InvenTree/search.html:330
#: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
#: users/models.py:43
@ -2071,7 +2071,7 @@ msgstr ""
#: order/templates/order/purchase_orders.html:8
#: order/templates/order/purchase_orders.html:13
#: part/templates/part/navbar.html:78 part/templates/part/navbar.html:81
#: part/templates/part/orders.html:10 templates/InvenTree/index.html:203
#: part/templates/part/orders.html:10 templates/InvenTree/index.html:204
#: templates/InvenTree/search.html:300
#: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
#: users/models.py:42
@ -2263,7 +2263,7 @@ msgstr ""
msgid "Edit Supplier Part"
msgstr ""
#: company/views.py:378 templates/js/stock.js:1083
#: company/views.py:378 templates/js/stock.js:1087
msgid "Create new Supplier Part"
msgstr ""
@ -2713,8 +2713,8 @@ msgstr ""
#: order/templates/order/purchase_order_detail.html:45
#: order/templates/order/purchase_order_detail.html:125
#: part/templates/part/category.html:197 part/templates/part/category.html:239
#: stock/templates/stock/location.html:191 templates/js/stock.js:704
#: templates/js/stock.js:1088
#: stock/templates/stock/location.html:191 templates/js/stock.js:708
#: templates/js/stock.js:1092
msgid "New Location"
msgstr ""
@ -3242,7 +3242,7 @@ msgstr ""
#: part/models.py:83 part/templates/part/category.html:19
#: part/templates/part/category.html:90 part/templates/part/category.html:141
#: templates/InvenTree/search.html:126 templates/stats.html:39
#: templates/InvenTree/search.html:126 templates/stats.html:52
#: users/models.py:37
msgid "Part Categories"
msgstr ""
@ -3675,7 +3675,7 @@ msgid "All selected BOM items will be deleted"
msgstr ""
#: part/templates/part/bom.html:160 part/views.py:584
#: templates/js/stock.js:1077
#: templates/js/stock.js:1081
msgid "Create New Part"
msgstr ""
@ -3844,7 +3844,7 @@ msgid "Export Data"
msgstr ""
#: part/templates/part/category.html:198
#: stock/templates/stock/location.html:192 templates/js/stock.js:705
#: stock/templates/stock/location.html:192 templates/js/stock.js:709
msgid "Create new location"
msgstr ""
@ -4085,7 +4085,7 @@ msgid "Edit"
msgstr ""
#: part/templates/part/params.html:44 part/templates/part/related.html:44
#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:175
#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:182
msgid "Delete"
msgstr ""
@ -4628,7 +4628,7 @@ msgid "Result"
msgstr ""
#: report/templates/report/inventree_test_report_base.html:92
#: templates/js/order.js:195 templates/js/stock.js:905
#: templates/js/order.js:195 templates/js/stock.js:909
msgid "Date"
msgstr ""
@ -4651,7 +4651,7 @@ msgid "Moved {n} parts to {loc}"
msgstr ""
#: stock/forms.py:114 stock/forms.py:406 stock/models.py:473
#: stock/templates/stock/item_base.html:349 templates/js/stock.js:652
#: stock/templates/stock/item_base.html:349 templates/js/stock.js:656
msgid "Expiry Date"
msgstr ""
@ -5085,11 +5085,11 @@ msgid "Remove stock"
msgstr ""
#: stock/templates/stock/item_base.html:169
msgid "Transfer stock"
msgid "Serialize stock"
msgstr ""
#: stock/templates/stock/item_base.html:172
msgid "Serialize stock"
#: stock/templates/stock/item_base.html:173
msgid "Transfer stock"
msgstr ""
#: stock/templates/stock/item_base.html:176
@ -5100,7 +5100,7 @@ msgstr ""
msgid "Return to stock"
msgstr ""
#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1218
#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1222
msgid "Uninstall stock item"
msgstr ""
@ -5153,7 +5153,7 @@ msgstr ""
msgid "This StockItem expires on"
msgstr ""
#: stock/templates/stock/item_base.html:362 templates/js/stock.js:658
#: stock/templates/stock/item_base.html:362 templates/js/stock.js:662
msgid "Last Updated"
msgstr ""
@ -5266,7 +5266,7 @@ msgid "Stock Details"
msgstr ""
#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263
#: templates/stats.html:52 users/models.py:39
#: templates/stats.html:65 users/models.py:39
msgid "Stock Locations"
msgstr ""
@ -5451,7 +5451,7 @@ msgstr ""
msgid "Add Stock Items"
msgstr ""
#: stock/views.py:1001 users/models.py:171
#: stock/views.py:1001 users/models.py:178
msgid "Add"
msgstr ""
@ -5581,35 +5581,35 @@ msgstr ""
msgid "Recently Updated"
msgstr ""
#: templates/InvenTree/index.html:143
#: templates/InvenTree/index.html:144
msgid "Expired Stock"
msgstr ""
#: templates/InvenTree/index.html:144
#: templates/InvenTree/index.html:145
msgid "Stale Stock"
msgstr ""
#: templates/InvenTree/index.html:182
#: templates/InvenTree/index.html:183
msgid "Build Orders In Progress"
msgstr ""
#: templates/InvenTree/index.html:183
#: templates/InvenTree/index.html:184
msgid "Overdue Build Orders"
msgstr ""
#: templates/InvenTree/index.html:204
#: templates/InvenTree/index.html:205
msgid "Outstanding Purchase Orders"
msgstr ""
#: templates/InvenTree/index.html:205
#: templates/InvenTree/index.html:206
msgid "Overdue Purchase Orders"
msgstr ""
#: templates/InvenTree/index.html:227
#: templates/InvenTree/index.html:228
msgid "Outstanding Sales Orders"
msgstr ""
#: templates/InvenTree/index.html:228
#: templates/InvenTree/index.html:229
msgid "Overdue Sales Orders"
msgstr ""
@ -5621,11 +5621,11 @@ msgstr ""
msgid "Enter a search query"
msgstr ""
#: templates/InvenTree/search.html:252 templates/js/stock.js:301
#: templates/InvenTree/search.html:252 templates/js/stock.js:300
msgid "Shipped to customer"
msgstr ""
#: templates/InvenTree/search.html:255 templates/js/stock.js:311
#: templates/InvenTree/search.html:255 templates/js/stock.js:310
msgid "No stock location set"
msgstr ""
@ -5700,7 +5700,7 @@ msgid "Edit setting"
msgstr ""
#: templates/InvenTree/settings/settings.html:7
#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:76
#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:78
msgid "Settings"
msgstr ""
@ -5797,30 +5797,38 @@ msgid "InvenTree Version"
msgstr ""
#: templates/about.html:26
msgid "Django Version"
msgid "Up to Date"
msgstr ""
#: templates/about.html:30
msgid "Commit Hash"
#: templates/about.html:28
msgid "Update Available"
msgstr ""
#: templates/about.html:34
msgid "Commit Date"
msgid "Django Version"
msgstr ""
#: templates/about.html:38
msgid "InvenTree Documentation"
msgstr ""
#: templates/about.html:43
msgid "View Code on GitHub"
#: templates/about.html:41
msgid "Commit Hash"
msgstr ""
#: templates/about.html:48
msgid "Get the App"
msgid "Commit Date"
msgstr ""
#: templates/about.html:53
msgid "InvenTree Documentation"
msgstr ""
#: templates/about.html:58
msgid "View Code on GitHub"
msgstr ""
#: templates/about.html:63
msgid "Get the App"
msgstr ""
#: templates/about.html:68
msgid "Submit Bug Report"
msgstr ""
@ -6018,8 +6026,8 @@ msgstr ""
msgid "No builds matching query"
msgstr ""
#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:512
#: templates/js/stock.js:1250
#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:511
#: templates/js/stock.js:1254
msgid "Select"
msgstr ""
@ -6371,115 +6379,115 @@ msgstr ""
msgid "Test Date"
msgstr ""
#: templates/js/stock.js:293
#: templates/js/stock.js:292
msgid "In production"
msgstr ""
#: templates/js/stock.js:297
#: templates/js/stock.js:296
msgid "Installed in Stock Item"
msgstr ""
#: templates/js/stock.js:305
#: templates/js/stock.js:304
msgid "Assigned to Sales Order"
msgstr ""
#: templates/js/stock.js:337
#: templates/js/stock.js:336
msgid "No stock items matching query"
msgstr ""
#: templates/js/stock.js:479
#: templates/js/stock.js:478
msgid "Undefined location"
msgstr ""
#: templates/js/stock.js:575
#: templates/js/stock.js:579
msgid "Stock item is in production"
msgstr ""
#: templates/js/stock.js:580
#: templates/js/stock.js:584
msgid "Stock item assigned to sales order"
msgstr ""
#: templates/js/stock.js:583
#: templates/js/stock.js:587
msgid "Stock item assigned to customer"
msgstr ""
#: templates/js/stock.js:587
#: templates/js/stock.js:591
msgid "Stock item has expired"
msgstr ""
#: templates/js/stock.js:589
#: templates/js/stock.js:593
msgid "Stock item will expire soon"
msgstr ""
#: templates/js/stock.js:593
#: templates/js/stock.js:597
msgid "Stock item has been allocated"
msgstr ""
#: templates/js/stock.js:597
#: templates/js/stock.js:601
msgid "Stock item has been installed in another item"
msgstr ""
#: templates/js/stock.js:605
#: templates/js/stock.js:609
msgid "Stock item has been rejected"
msgstr ""
#: templates/js/stock.js:609
#: templates/js/stock.js:613
msgid "Stock item is lost"
msgstr ""
#: templates/js/stock.js:612
#: templates/js/stock.js:616
msgid "Stock item is destroyed"
msgstr ""
#: templates/js/stock.js:616 templates/js/table_filters.js:116
#: templates/js/stock.js:620 templates/js/table_filters.js:116
msgid "Depleted"
msgstr ""
#: templates/js/stock.js:645
#: templates/js/stock.js:649
msgid "Stocktake"
msgstr ""
#: templates/js/stock.js:821
#: templates/js/stock.js:825
msgid "Stock Status"
msgstr ""
#: templates/js/stock.js:836
#: templates/js/stock.js:840
msgid "Set Stock Status"
msgstr ""
#: templates/js/stock.js:850
#: templates/js/stock.js:854
msgid "Select Status Code"
msgstr ""
#: templates/js/stock.js:851
#: templates/js/stock.js:855
msgid "Status code must be selected"
msgstr ""
#: templates/js/stock.js:969
#: templates/js/stock.js:973
msgid "No user information"
msgstr ""
#: templates/js/stock.js:979
#: templates/js/stock.js:983
msgid "Edit tracking entry"
msgstr ""
#: templates/js/stock.js:980
#: templates/js/stock.js:984
msgid "Delete tracking entry"
msgstr ""
#: templates/js/stock.js:1089
#: templates/js/stock.js:1093
msgid "Create New Location"
msgstr ""
#: templates/js/stock.js:1188
#: templates/js/stock.js:1192
msgid "Serial"
msgstr ""
#: templates/js/stock.js:1281 templates/js/table_filters.js:149
#: templates/js/stock.js:1285 templates/js/table_filters.js:149
msgid "Installed"
msgstr ""
#: templates/js/stock.js:1306
#: templates/js/stock.js:1310
msgid "Install item"
msgstr ""
@ -6705,23 +6713,19 @@ msgstr ""
msgid "Scan Barcode"
msgstr ""
#: templates/navbar.html:63
msgid "InvenTree server issues detected"
msgstr ""
#: templates/navbar.html:69 users/models.py:36
#: templates/navbar.html:71 users/models.py:36
msgid "Admin"
msgstr ""
#: templates/navbar.html:71 templates/registration/logout.html:5
#: templates/navbar.html:73 templates/registration/logout.html:5
msgid "Logout"
msgstr ""
#: templates/navbar.html:73 templates/registration/login.html:89
#: templates/navbar.html:75 templates/registration/login.html:89
msgid "Login"
msgstr ""
#: templates/navbar.html:85
#: templates/navbar.html:94
msgid "About InvenTree"
msgstr ""
@ -6761,18 +6765,30 @@ msgstr ""
msgid "Instance Name"
msgstr ""
#: templates/stats.html:18
#: templates/stats.html:19
msgid "Server status"
msgstr ""
#: templates/stats.html:21
#: templates/stats.html:22
msgid "Healthy"
msgstr ""
#: templates/stats.html:23
#: templates/stats.html:24
msgid "Issues detected"
msgstr ""
#: templates/stats.html:30
msgid "Background Worker"
msgstr ""
#: templates/stats.html:33
msgid "Operational"
msgstr ""
#: templates/stats.html:35
msgid "Not running"
msgstr ""
#: templates/stock_table.html:14
msgid "Export Stock Information"
msgstr ""
@ -6857,34 +6873,34 @@ msgstr ""
msgid "Important dates"
msgstr ""
#: users/models.py:158
#: users/models.py:165
msgid "Permission set"
msgstr ""
#: users/models.py:166
#: users/models.py:173
msgid "Group"
msgstr ""
#: users/models.py:169
#: users/models.py:176
msgid "View"
msgstr ""
#: users/models.py:169
#: users/models.py:176
msgid "Permission to view items"
msgstr ""
#: users/models.py:171
#: users/models.py:178
msgid "Permission to add items"
msgstr ""
#: users/models.py:173
#: users/models.py:180
msgid "Change"
msgstr ""
#: users/models.py:173
#: users/models.py:180
msgid "Permissions to edit items"
msgstr ""
#: users/models.py:175
#: users/models.py:182
msgid "Permission to delete items"
msgstr ""

View File

@ -735,6 +735,15 @@ class PartParameterList(generics.ListCreateAPIView):
]
class PartParameterDetail(generics.RetrieveUpdateDestroyAPIView):
"""
API endpoint for detail view of a single PartParameter object
"""
queryset = PartParameter.objects.all()
serializer_class = part_serializers.PartParameterSerializer
class BomList(generics.ListCreateAPIView):
""" API endpoint for accessing a list of BomItem objects.
@ -942,6 +951,8 @@ part_api_urls = [
# Base URL for PartParameter API endpoints
url(r'^parameter/', include([
url(r'^template/$', PartParameterTemplateList.as_view(), name='api-part-param-template-list'),
url(r'^(?P<pk>\d+)/', PartParameterDetail.as_view(), name='api-part-param-detail'),
url(r'^.*$', PartParameterList.as_view(), name='api-part-param-list'),
])),

View File

@ -33,6 +33,27 @@
template: 1
data: 12
- model: part.PartParameter
pk: 3
fields:
part: 3
template: 1
data: 12
- model: part.PartParameter
pk: 4
fields:
part: 3
template: 2
data: 12
- model: part.PartParameter
pk: 5
fields:
part: 3
template: 3
data: 12
# Add some template parameters to categories (requires category.yaml)
- model: part.PartCategoryParameterTemplate
pk: 1

View File

@ -325,3 +325,106 @@ class PartAPIAggregationTest(InvenTreeAPITestCase):
self.assertEqual(data['in_stock'], 1100)
self.assertEqual(data['stock_item_count'], 105)
class PartParameterTest(InvenTreeAPITestCase):
"""
Tests for the ParParameter API
"""
superuser = True
fixtures = [
'category',
'part',
'location',
'params',
]
def setUp(self):
super().setUp()
def test_list_params(self):
"""
Test for listing part parameters
"""
url = reverse('api-part-param-list')
response = self.client.get(url, format='json')
self.assertEqual(len(response.data), 5)
# Filter by part
response = self.client.get(
url,
{
'part': 3,
},
format='json'
)
self.assertEqual(len(response.data), 3)
# Filter by template
response = self.client.get(
url,
{
'template': 1,
},
format='json',
)
self.assertEqual(len(response.data), 3)
def test_create_param(self):
"""
Test that we can create a param via the API
"""
url = reverse('api-part-param-list')
response = self.client.post(
url,
{
'part': '2',
'template': '3',
'data': 70
}
)
self.assertEqual(response.status_code, 201)
response = self.client.get(url, format='json')
self.assertEqual(len(response.data), 6)
def test_param_detail(self):
"""
Tests for the PartParameter detail endpoint
"""
url = reverse('api-part-param-detail', kwargs={'pk': 5})
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
data = response.data
self.assertEqual(data['pk'], 5)
self.assertEqual(data['part'], 3)
self.assertEqual(data['data'], '12')
# PATCH data back in
response = self.client.patch(url, {'data': '15'}, format='json')
self.assertEqual(response.status_code, 200)
# Check that the data changed!
response = self.client.get(url, format='json')
data = response.data
self.assertEqual(data['data'], '15')

View File

@ -0,0 +1,59 @@
{% load static %}
{% load i18n %}
{% load crispy_forms_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- CSS -->
<link rel="stylesheet" href="{% static 'css/bootstrap_3.3.7_css_bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'css/select2.css' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap-table.css' %}">
<link rel="stylesheet" href="{% static 'css/inventree.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/brands.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/solid.css' %}">
<script type='text/javascript' src="{% static 'fontawesome/js/solid.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/brands.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/fontawesome.js' %}"></script>
<style>
.login-error {
color: #F88;
}
</style>
<title>
InvenTree
</title>
</head>
<body class='login-screen'>
<div class='main body-wrapper login-screen'>
<div class='login-container'>
<div class="row">
<div class='container-fluid'>
<div class='clearfix content-heading login-header'>
<img class="pull-left" src="{% static 'img/inventree.png' %}" width="60" height="60"/>
<span><h3>InvenTree</h3></span>
</div>
<hr>
<div class='container-fluid'>
<p>{% trans "You have been logged out" %}</p>
<p><a href='{% url "login" %}'>{% trans "Return to login screen" %}</a></p>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -89,7 +89,12 @@
<button class='pull-right btn btn-primary login-button' type="submit">{% trans "Login" %}</button>
</form>
{% if email_configured %}
<hr><br>
<p>{% trans "Forgotten your password?" %} - <a href='{% url "password_reset" %}'>{% trans "Click here to reset" %}</a></p>
</div>
{% endif %}
</div>
</div>
</div>

View File

@ -1,8 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% block content %}
<h4>{% trans "Logout" %}</h4>
<p>{% trans "You have been logged out" %}</p>
<p>{% trans 'Click' %} <a href="{% url 'login' %}"> {% trans 'here</a> to log in</p>' %}
{% endblock %}

View File

@ -0,0 +1,59 @@
{% load static %}
{% load i18n %}
{% load crispy_forms_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- CSS -->
<link rel="stylesheet" href="{% static 'css/bootstrap_3.3.7_css_bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'css/select2.css' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap-table.css' %}">
<link rel="stylesheet" href="{% static 'css/inventree.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/brands.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/solid.css' %}">
<script type='text/javascript' src="{% static 'fontawesome/js/solid.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/brands.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/fontawesome.js' %}"></script>
<style>
.login-error {
color: #F88;
}
</style>
<title>
InvenTree
</title>
</head>
<body class='login-screen'>
<div class='main body-wrapper login-screen'>
<div class='login-container'>
<div class="row">
<div class='container-fluid'>
<div class='clearfix content-heading login-header'>
<img class="pull-left" src="{% static 'img/inventree.png' %}" width="60" height="60"/>
<span><h3>InvenTree</h3></span>
</div>
<hr>
<div class='container-fluid'>
<p>{% trans "Password reset complete" %}</p>
<p><a href='{% url "login" %}'>{% trans "Return to login screen" %}</a></p>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -0,0 +1,69 @@
{% load static %}
{% load i18n %}
{% load crispy_forms_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- CSS -->
<link rel="stylesheet" href="{% static 'css/bootstrap_3.3.7_css_bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'css/select2.css' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap-table.css' %}">
<link rel="stylesheet" href="{% static 'css/inventree.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/brands.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/solid.css' %}">
<script type='text/javascript' src="{% static 'fontawesome/js/solid.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/brands.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/fontawesome.js' %}"></script>
<style>
.login-error {
color: #F88;
}
</style>
<title>
InvenTree
</title>
</head>
<body class='login-screen'>
<div class='main body-wrapper login-screen'>
<div class='login-container'>
<div class="row">
<div class='container-fluid'>
<div class='clearfix content-heading login-header'>
<img class="pull-left" src="{% static 'img/inventree.png' %}" width="60" height="60"/>
<span><h3>InvenTree</h3></span>
</div>
<hr>
<div class='container-fluid'>
{% if validlink %}
<h3>{% trans "Change password" %}</h3>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-primary" type="submit">{% trans "Change password" %}</button>
</form>
{% else %}
<p>
{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}
</p>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -0,0 +1,65 @@
{% load static %}
{% load i18n %}
{% load crispy_forms_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- CSS -->
<link rel="stylesheet" href="{% static 'css/bootstrap_3.3.7_css_bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'css/select2.css' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap-table.css' %}">
<link rel="stylesheet" href="{% static 'css/inventree.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/brands.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/solid.css' %}">
<script type='text/javascript' src="{% static 'fontawesome/js/solid.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/brands.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/fontawesome.js' %}"></script>
<style>
.login-error {
color: #F88;
}
</style>
<title>
InvenTree
</title>
</head>
<body class='login-screen'>
<div class='main body-wrapper login-screen'>
<div class='login-container'>
<div class="row">
<div class='container-fluid'>
<div class='clearfix content-heading login-header'>
<img class="pull-left" src="{% static 'img/inventree.png' %}" width="60" height="60"/>
<span><h3>InvenTree</h3></span>
</div>
<hr>
<div class='container-fluid'>
<p>
{% trans "We've emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly." %}
</p>
<p>
{% trans "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." %}
</p>
<hr>
<a href='{% url "login" %}'>{% trans "Return to login screen" %}</a>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -0,0 +1,68 @@
{% load static %}
{% load i18n %}
{% load crispy_forms_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- CSS -->
<link rel="stylesheet" href="{% static 'css/bootstrap_3.3.7_css_bootstrap.min.css' %}">
<link rel="stylesheet" href="{% static 'css/select2.css' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap-table.css' %}">
<link rel="stylesheet" href="{% static 'css/inventree.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/brands.css' %}">
<link rel="stylesheet" href="{% static 'fontawesome/css/solid.css' %}">
<script type='text/javascript' src="{% static 'fontawesome/js/solid.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/brands.js' %}"></script>
<script type='text/javascript' src="{% static 'fontawesome/js/fontawesome.js' %}"></script>
<style>
.login-error {
color: #F88;
}
</style>
<title>
InvenTree
</title>
</head>
<body class='login-screen'>
<div class='main body-wrapper login-screen'>
<div class='login-container'>
<div class="row">
<div class='container-fluid'>
<div class='clearfix content-heading login-header'>
<img class="pull-left" src="{% static 'img/inventree.png' %}" width="60" height="60"/>
<span><h3>InvenTree</h3></span>
</div>
<hr>
<div class='container-fluid'>
<p>{% trans "Forgotten your password?" %}</p>
<p>{% trans "Enter your email address below." %}</p>
<p>{% trans "An email will be sent with password reset instructions." %}</p>
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button class="btn btn-primary" type="submit">{% trans "Send email" %}</button>
</form>
</div>
</div>
</div>
</div>
</div>
</body>

View File

@ -25,18 +25,29 @@
{% endif %}
</td>
</tr>
{% if not django_q_running %}
<tr>
<td><span class='fas fa-tasks'></span></td>
<td>{% trans "Background Worker" %}</td>
<td>
{% if django_q_running %}
<span class='label label-green'>{% trans "Operational" %}</span>
{% else %}
<span class='label label-red'>{% trans "Not running" %}</span>
{% endif %}
<a href='https://inventree.readthedocs.io/en/latest/admin/tasks'>
<span class='label label-red'>{% trans "Background worker not running" %}</span>
</a>
</td>
</tr>
{% endif %}
{% if not email_configured %}
<tr>
<td><span class='fas fa-envelope'></span></td>
<td>{% trans "Email Settings" %}</td>
<td>
<a href='https://inventree.readthedocs.io/en/latest/admin/email'>
<span class='label label-red'>{% trans "Email settings not configured" %}</span>
</a>
</td>
</tr>
{% endif %}
{% endif %}
{% if not system_healthy %}
{% for issue in system_issues %}

View File

@ -1,5 +1,5 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Docker Pulls](https://img.shields.io/docker/pulls/inventree/inventree)](https://hub.docker.com/inventree/inventree)
[![Docker Pulls](https://img.shields.io/docker/pulls/inventree/inventree)](https://hub.docker.com/r/inventree/inventree)
[![Coverage Status](https://coveralls.io/repos/github/inventree/InvenTree/badge.svg)](https://coveralls.io/github/inventree/InvenTree)
![PEP](https://github.com/inventree/inventree/actions/workflows/style.yaml/badge.svg)
![Docker Build](https://github.com/inventree/inventree/actions/workflows/docker_build.yaml/badge.svg)