From 698b94640380ae4546e8bb84bbc64017fd1ec99a Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Fri, 2 Apr 2021 23:03:24 +0200 Subject: [PATCH 01/16] activated translations for settings --- InvenTree/templates/InvenTree/settings/setting.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InvenTree/templates/InvenTree/settings/setting.html b/InvenTree/templates/InvenTree/settings/setting.html index b7932fc30a..7376adf8d9 100644 --- a/InvenTree/templates/InvenTree/settings/setting.html +++ b/InvenTree/templates/InvenTree/settings/setting.html @@ -8,7 +8,7 @@ <span class='fas {{ icon }}'></span> {% endif %} </td> - <td><b>{{ setting.name }}</b></td> + <td><b>{% trans setting.name %}</b></td> <td> {% if setting.is_bool %} <div> @@ -24,7 +24,7 @@ {% endif %} {% endif %} <td> - {{ setting.description }} + {% trans setting.description %} </td> <td> <div class='btn-group float-right'> From 2de6fcbfa422d91727523edad7d94a3a2a45d887 Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sat, 3 Apr 2021 03:59:09 +0200 Subject: [PATCH 02/16] added missing translation fields #753 --- InvenTree/InvenTree/models.py | 10 +++++++--- InvenTree/build/forms.py | 4 +++- InvenTree/build/models.py | 5 ++++- InvenTree/company/forms.py | 1 + InvenTree/company/models.py | 12 ++++++------ InvenTree/part/models.py | 21 +++++++++++---------- InvenTree/stock/forms.py | 2 +- InvenTree/stock/models.py | 6 +++--- 8 files changed, 36 insertions(+), 25 deletions(-) diff --git a/InvenTree/InvenTree/models.py b/InvenTree/InvenTree/models.py index cffe48cc0b..8494b52a10 100644 --- a/InvenTree/InvenTree/models.py +++ b/InvenTree/InvenTree/models.py @@ -56,19 +56,20 @@ class InvenTreeAttachment(models.Model): def __str__(self): return os.path.basename(self.attachment.name) - attachment = models.FileField(upload_to=rename_attachment, + attachment = models.FileField(upload_to=rename_attachment, verbose_name=_('Attachment'), help_text=_('Select file to attach')) - comment = models.CharField(blank=True, max_length=100, help_text=_('File comment')) + comment = models.CharField(blank=True, max_length=100, verbose_name=_('Comment'), help_text=_('File comment')) user = models.ForeignKey( User, on_delete=models.SET_NULL, blank=True, null=True, + verbose_name=_('User'), help_text=_('User'), ) - upload_date = models.DateField(auto_now_add=True, null=True, blank=True) + upload_date = models.DateField(auto_now_add=True, null=True, blank=True, verbose_name=_('upload date')) @property def basename(self): @@ -103,12 +104,14 @@ class InvenTreeTree(MPTTModel): blank=False, max_length=100, validators=[validate_tree_name], + verbose_name=_("Name"), help_text=_("Name"), ) description = models.CharField( blank=True, max_length=250, + verbose_name=_("Description"), help_text=_("Description (optional)") ) @@ -117,6 +120,7 @@ class InvenTreeTree(MPTTModel): on_delete=models.DO_NOTHING, blank=True, null=True, + verbose_name=_("parent"), related_name='children') @property diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index 4892fa631f..380c72f50d 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -36,11 +36,13 @@ class EditBuildForm(HelperForm): } target_date = DatePickerFormField( + label=_('Target Date'), help_text=_('Target date for build completion. Build will be overdue after this date.') ) quantity = RoundingDecimalFormField( max_digits=10, decimal_places=5, + label=_('Quantity'), help_text=_('Number of items to build') ) @@ -87,7 +89,7 @@ class BuildOutputCreateForm(HelperForm): ) serial_numbers = forms.CharField( - label=_('Serial numbers'), + label=_('Serial Numbers'), required=False, help_text=_('Enter serial numbers for build outputs'), ) diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index ada9db1e08..1c668324a5 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -224,12 +224,13 @@ class Build(MPTTModel): help_text=_('Target date for build completion. Build will be overdue after this date.') ) - completion_date = models.DateField(null=True, blank=True) + completion_date = models.DateField(null=True, blank=True, verbose_name=_('Completion Date')) completed_by = models.ForeignKey( User, on_delete=models.SET_NULL, blank=True, null=True, + verbose_name=_('completed by'), related_name='builds_completed' ) @@ -237,6 +238,7 @@ class Build(MPTTModel): User, on_delete=models.SET_NULL, blank=True, null=True, + verbose_name=_('Issued by'), help_text=_('User who issued this build order'), related_name='builds_issued', ) @@ -245,6 +247,7 @@ class Build(MPTTModel): UserModels.Owner, on_delete=models.SET_NULL, blank=True, null=True, + verbose_name=_('Responsible'), help_text=_('User responsible for this build order'), related_name='builds_responsible', ) diff --git a/InvenTree/company/forms.py b/InvenTree/company/forms.py index 67ac402ba7..3d2826fdec 100644 --- a/InvenTree/company/forms.py +++ b/InvenTree/company/forms.py @@ -34,6 +34,7 @@ class EditCompanyForm(HelperForm): currency = django.forms.ChoiceField( required=False, + label=_('Currency'), help_text=_('Default currency used for this company'), choices=[('', '----------')] + djmoney.settings.CURRENCY_CHOICES, initial=common.settings.currency_code_default, diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index e4386712c8..c1b0594aac 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -126,11 +126,11 @@ class Company(models.Model): notes = MarkdownxField(blank=True) - is_customer = models.BooleanField(default=False, help_text=_('Do you sell items to this company?')) + is_customer = models.BooleanField(default=False, verbose_name=_('is customer'), help_text=_('Do you sell items to this company?')) - is_supplier = models.BooleanField(default=True, help_text=_('Do you purchase items from this company?')) + is_supplier = models.BooleanField(default=True, verbose_name=_('is supplier'), help_text=_('Do you purchase items from this company?')) - is_manufacturer = models.BooleanField(default=False, help_text=_('Does this company manufacture parts?')) + is_manufacturer = models.BooleanField(default=False, verbose_name=_('is manufacturer'), help_text=_('Does this company manufacture parts?')) currency = models.CharField( max_length=3, @@ -366,11 +366,11 @@ class SupplierPart(models.Model): help_text=_('Notes') ) - base_cost = models.DecimalField(max_digits=10, decimal_places=3, default=0, validators=[MinValueValidator(0)], help_text=_('Minimum charge (e.g. stocking fee)')) + base_cost = models.DecimalField(max_digits=10, decimal_places=3, default=0, validators=[MinValueValidator(0)], verbose_name=('base cost'), help_text=_('Minimum charge (e.g. stocking fee)')) - packaging = models.CharField(max_length=50, blank=True, null=True, help_text=_('Part packaging')) + packaging = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Packaging'), help_text=_('Part packaging')) - multiple = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1)], help_text=('Order multiple')) + multiple = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1)], verbose_name=_('multiple'), help_text=('Order multiple')) # TODO - Reimplement lead-time as a charfield with special validation (pattern matching). # lead_time = models.DurationField(blank=True, null=True) diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 2824a89e75..9003e800d8 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -69,10 +69,11 @@ class PartCategory(InvenTreeTree): 'stock.StockLocation', related_name="default_categories", null=True, blank=True, on_delete=models.SET_NULL, + verbose_name=_('Default Location'), help_text=_('Default location for parts in this category') ) - default_keywords = models.CharField(null=True, blank=True, max_length=250, help_text=_('Default keywords for parts in this category')) + default_keywords = models.CharField(null=True, blank=True, max_length=250, verbose_name=_('Default keywords'), help_text=_('Default keywords for parts in this category')) def get_absolute_url(self): return reverse('category-detail', kwargs={'pk': self.id}) @@ -870,18 +871,18 @@ class Part(MPTTModel): help_text=_('Part notes - supports Markdown formatting') ) - bom_checksum = models.CharField(max_length=128, blank=True, help_text=_('Stored BOM checksum')) + bom_checksum = models.CharField(max_length=128, blank=True, verbose_name=_('BOM checksum'), help_text=_('Stored BOM checksum')) bom_checked_by = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, - related_name='boms_checked') + verbose_name=_('BOM checked by'), related_name='boms_checked') - bom_checked_date = models.DateField(blank=True, null=True) + bom_checked_date = models.DateField(blank=True, null=True, verbose_name=_('BOM checked date')) - creation_date = models.DateField(auto_now_add=True, editable=False, blank=True, null=True) + creation_date = models.DateField(auto_now_add=True, editable=False, blank=True, null=True, verbose_name=_('Creation Date')) - creation_user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, related_name='parts_created') + creation_user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, verbose_name=_('Creation User'), related_name='parts_created') - responsible = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, related_name='parts_responible') + responsible = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, verbose_name=_('Responsible'), related_name='parts_responible') def format_barcode(self, **kwargs): """ Return a JSON string for formatting a barcode for this Part object """ @@ -2050,11 +2051,11 @@ class PartParameter(models.Model): # Prevent multiple instances of a parameter for a single part unique_together = ('part', 'template') - part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='parameters', help_text=_('Parent Part')) + part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='parameters', verbose_name=_('Part'), help_text=_('Parent Part')) - template = models.ForeignKey(PartParameterTemplate, on_delete=models.CASCADE, related_name='instances', help_text=_('Parameter Template')) + template = models.ForeignKey(PartParameterTemplate, on_delete=models.CASCADE, related_name='instances', verbose_name=_('Template'), help_text=_('Parameter Template')) - data = models.CharField(max_length=500, help_text=_('Parameter Value')) + data = models.CharField(max_length=500, verbose_name=_('Data'), help_text=_('Parameter Value')) @classmethod def create(cls, part, template, data, save=False): diff --git a/InvenTree/stock/forms.py b/InvenTree/stock/forms.py index 0bec20a3e8..9bc5063925 100644 --- a/InvenTree/stock/forms.py +++ b/InvenTree/stock/forms.py @@ -114,7 +114,7 @@ class CreateStockItemForm(HelperForm): help_text=('Expiration date for this stock item'), ) - serial_numbers = forms.CharField(label=_('Serial numbers'), required=False, help_text=_('Enter unique serial numbers (or leave blank)')) + serial_numbers = forms.CharField(label=_('Serial Numbers'), required=False, help_text=_('Enter unique serial numbers (or leave blank)')) def __init__(self, *args, **kwargs): diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index 1be988fed0..df767a3a70 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -1548,11 +1548,11 @@ class StockItemTracking(models.Model): date = models.DateTimeField(auto_now_add=True, editable=False) - title = models.CharField(blank=False, max_length=250, help_text=_('Tracking entry title')) + title = models.CharField(blank=False, max_length=250, verbose_name=_('Title'), help_text=_('Tracking entry title')) - notes = models.CharField(blank=True, max_length=512, help_text=_('Entry notes')) + notes = models.CharField(blank=True, max_length=512, verbose_name=_('Notes'), help_text=_('Entry notes')) - link = InvenTreeURLField(blank=True, help_text=_('Link to external page for further information')) + link = InvenTreeURLField(blank=True, verbose_name=_('Link'), help_text=_('Link to external page for further information')) user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True) From 446bc06c1bf172d0b806a5b9f5b2e79ad5bf6c5f Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sat, 3 Apr 2021 04:01:40 +0200 Subject: [PATCH 03/16] switched translation methode to lazy --- InvenTree/InvenTree/forms.py | 2 +- InvenTree/build/forms.py | 2 +- InvenTree/build/models.py | 2 +- InvenTree/build/views.py | 2 +- InvenTree/common/models.py | 2 +- InvenTree/company/forms.py | 2 +- InvenTree/company/models.py | 2 +- InvenTree/order/forms.py | 2 +- InvenTree/order/models.py | 2 +- InvenTree/part/forms.py | 2 +- InvenTree/stock/forms.py | 2 +- InvenTree/stock/views.py | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/InvenTree/InvenTree/forms.py b/InvenTree/InvenTree/forms.py index 56a1a116da..79cdf49c3d 100644 --- a/InvenTree/InvenTree/forms.py +++ b/InvenTree/InvenTree/forms.py @@ -5,7 +5,7 @@ Helper forms which subclass Django forms to provide additional functionality # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django import forms from crispy_forms.helper import FormHelper from crispy_forms.layout import Layout, Field diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index 380c72f50d..48be9a0ffa 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -5,7 +5,7 @@ Django Forms for interacting with Build objects # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django import forms from InvenTree.forms import HelperForm diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index 1c668324a5..ad0149ed48 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -9,7 +9,7 @@ import os from datetime import datetime from django.contrib.auth.models import User -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ValidationError from django.urls import reverse diff --git a/InvenTree/build/views.py b/InvenTree/build/views.py index e8a1d33ddc..15ced77130 100644 --- a/InvenTree/build/views.py +++ b/InvenTree/build/views.py @@ -5,7 +5,7 @@ Django views for interacting with Build objects # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ValidationError from django.views.generic import DetailView, ListView, UpdateView from django.forms import HiddenInput diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index df8e3b2d37..12b51438cb 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -17,7 +17,7 @@ from djmoney.models.fields import MoneyField from djmoney.contrib.exchange.models import convert_money from djmoney.contrib.exchange.exceptions import MissingRate -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.core.validators import MinValueValidator, URLValidator from django.core.exceptions import ValidationError diff --git a/InvenTree/company/forms.py b/InvenTree/company/forms.py index 3d2826fdec..2677402334 100644 --- a/InvenTree/company/forms.py +++ b/InvenTree/company/forms.py @@ -8,7 +8,7 @@ from __future__ import unicode_literals from InvenTree.forms import HelperForm from InvenTree.fields import RoundingDecimalFormField -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ import django.forms import djmoney.settings diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index c1b0594aac..e05d81a16a 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -9,7 +9,7 @@ import os import math -from django.utils.translation import gettext_lazy as _ +from django.utils.translation import ugettext_lazy as _ from django.core.validators import MinValueValidator from django.db import models from django.db.models import Sum, Q, UniqueConstraint diff --git a/InvenTree/order/forms.py b/InvenTree/order/forms.py index bb6cb40889..c8501d68b2 100644 --- a/InvenTree/order/forms.py +++ b/InvenTree/order/forms.py @@ -6,7 +6,7 @@ Django Forms for interacting with Order objects from __future__ import unicode_literals from django import forms -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from mptt.fields import TreeNodeChoiceField diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index cb78eabc6a..b1ee7f7c74 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -15,7 +15,7 @@ from django.core.validators import MinValueValidator from django.core.exceptions import ValidationError from django.contrib.auth.models import User from django.urls import reverse -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from markdownx.models import MarkdownxField diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 7962ec3252..42970ccfb1 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -11,7 +11,7 @@ from InvenTree.fields import RoundingDecimalFormField from mptt.fields import TreeNodeChoiceField from django import forms -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ import common.models diff --git a/InvenTree/stock/forms.py b/InvenTree/stock/forms.py index 9bc5063925..3560f205cc 100644 --- a/InvenTree/stock/forms.py +++ b/InvenTree/stock/forms.py @@ -7,7 +7,7 @@ from __future__ import unicode_literals from django import forms from django.forms.utils import ErrorDict -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.core.validators import MinValueValidator from django.core.exceptions import ValidationError diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index 6edcb8cf70..eeee13ad3a 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -14,7 +14,7 @@ from django.urls import reverse from django.contrib.auth import get_user_model from django.contrib.auth.models import Group -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from moneyed import CURRENCIES From 0547e1c03bf1d9b82a914555b7272c545552c0fa Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sat, 3 Apr 2021 04:05:59 +0200 Subject: [PATCH 04/16] added more translations in html / js --- .../build/templates/build/build_base.html | 4 +-- .../templates/company/company_base.html | 6 ++-- .../company/supplier_part_orders.html | 2 +- .../order/order_wizard/select_parts.html | 2 +- .../order/order_wizard/select_pos.html | 2 +- .../order/templates/order/receive_parts.html | 2 +- .../templates/order/sales_order_base.html | 2 +- .../part/bom_upload/select_fields.html | 4 +-- InvenTree/part/templates/part/params.html | 4 +-- InvenTree/part/templates/part/part_base.html | 2 +- .../part/templates/part/part_pricing.html | 30 ++++++++++--------- .../stock/templates/stock/item_base.html | 2 +- InvenTree/stock/templates/stock/location.html | 6 ++-- .../stock/templates/stock/stock_adjust.html | 2 +- InvenTree/templates/InvenTree/search.html | 8 ++--- InvenTree/templates/js/modals.js | 2 +- InvenTree/templates/js/stock.js | 4 +-- InvenTree/templates/qr_button.html | 2 +- 18 files changed, 44 insertions(+), 42 deletions(-) diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index 83cef5bd44..a8e5e53377 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -164,7 +164,7 @@ src="{% static 'img/blank_image.png' %}" launchModalForm("{% url 'build-cancel' build.id %}", { reload: true, - submit_text: "Cancel Build", + submit_text: '{% trans "Cancel Build" %}', }); }); @@ -173,7 +173,7 @@ src="{% static 'img/blank_image.png' %}" "{% url 'build-complete' build.id %}", { reload: true, - submit_text: "Complete Build", + submit_text: '{% trans "Complete Build" %}', } ); }); diff --git a/InvenTree/company/templates/company/company_base.html b/InvenTree/company/templates/company/company_base.html index 9331e5d895..236cc58981 100644 --- a/InvenTree/company/templates/company/company_base.html +++ b/InvenTree/company/templates/company/company_base.html @@ -43,17 +43,17 @@ InvenTree | {% trans "Company" %} - {{ company.name }} <p>{{ company.description }}</p> <div class='btn-group action-buttons'> {% if company.is_supplier and roles.purchase_order.add %} - <button type='button' class='btn btn-default' id='company-order-2' title='Create purchase order'> + <button type='button' class='btn btn-default' id='company-order-2' title='{% trans "Create Purchase Order" %}'> <span class='fas fa-shopping-cart'/> </button> {% endif %} {% if perms.company.change_company %} - <button type='button' class='btn btn-default' id='company-edit' title='Edit company information'> + <button type='button' class='btn btn-default' id='company-edit' title='{% trans "Edit company information" %}'> <span class='fas fa-edit icon-green'/> </button> {% endif %} {% if perms.company.delete_company %} - <button type='button' class='btn btn-default' id='company-delete' title='Delete company'> + <button type='button' class='btn btn-default' id='company-delete' title='{% trans "Delete Company" %}'> <span class='fas fa-trash-alt icon-red'/> </button> {% endif %} diff --git a/InvenTree/company/templates/company/supplier_part_orders.html b/InvenTree/company/templates/company/supplier_part_orders.html index ae4b025b11..f01bfa68d1 100644 --- a/InvenTree/company/templates/company/supplier_part_orders.html +++ b/InvenTree/company/templates/company/supplier_part_orders.html @@ -14,7 +14,7 @@ {% if roles.purchase_order.add %} <div id='button-bar'> <div class='btn-group'> - <button class='btn btn-primary' type='button' id='order-part2' title='Order part'> + <button class='btn btn-primary' type='button' id='order-part2' title='{% trans "Order part" %}'> <span class='fas fa-shopping-cart'></span> {% trans "Order Part" %}</button> </div> </div> diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index c93e26e363..21e23266bb 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -66,7 +66,7 @@ </div> </td> <td> - <button class='btn btn-default btn-remove' onclick='removeOrderRowFromOrderWizard()' id='del_item_{{ part.id }}' title='Remove part' type='button'> + <button class='btn btn-default btn-remove' onclick='removeOrderRowFromOrderWizard()' id='del_item_{{ part.id }}' title='{% trans "Remove part" %}' type='button'> <span row='part_row_{{ part.id }}' class='fas fa-trash-alt icon-red'></span> </button> </td> diff --git a/InvenTree/order/templates/order/order_wizard/select_pos.html b/InvenTree/order/templates/order/order_wizard/select_pos.html index 3c322410ca..616e618deb 100644 --- a/InvenTree/order/templates/order/order_wizard/select_pos.html +++ b/InvenTree/order/templates/order/order_wizard/select_pos.html @@ -42,7 +42,7 @@ <button class='btn btn-default btn-create' id='new_po_{{ supplier.id }}' - title='Create new purchase order for {{ supplier.name }}' + title='{% trans "Create new purchase order for {{ supplier.name }}" %}' type='button' supplierid='{{ supplier.id }}' onclick='newPurchaseOrderFromOrderWizard()'> diff --git a/InvenTree/order/templates/order/receive_parts.html b/InvenTree/order/templates/order/receive_parts.html index 082fe083b9..3daa9119d8 100644 --- a/InvenTree/order/templates/order/receive_parts.html +++ b/InvenTree/order/templates/order/receive_parts.html @@ -54,7 +54,7 @@ </div> </td> <td> - <button class='btn btn-default btn-remove' onClick="removeOrderRowFromOrderWizard()" id='del_item_{{ line.id }}' title='Remove line' type='button'> + <button class='btn btn-default btn-remove' onClick="removeOrderRowFromOrderWizard()" id='del_item_{{ line.id }}' title='{% trans "Remove line" %}' type='button'> <span row='line_row_{{ line.id }}' class='fas fa-times-circle icon-red'></span> </button> </td> diff --git a/InvenTree/order/templates/order/sales_order_base.html b/InvenTree/order/templates/order/sales_order_base.html index ac4ebcf2bc..dfab8d1ae7 100644 --- a/InvenTree/order/templates/order/sales_order_base.html +++ b/InvenTree/order/templates/order/sales_order_base.html @@ -49,7 +49,7 @@ src="{% static 'img/blank_image.png' %}" <span class='fas fa-print'></span> </button> {% if roles.sales_order.change %} - <button type='button' class='btn btn-default' id='edit-order' title='Edit order information'> + <button type='button' class='btn btn-default' id='edit-order' title='{% trans "Edit order information" %}'> <span class='fas fa-edit icon-green'></span> </button> {% if order.status == SalesOrderStatus.PENDING %} diff --git a/InvenTree/part/templates/part/bom_upload/select_fields.html b/InvenTree/part/templates/part/bom_upload/select_fields.html index 5e44cee2b9..e82223da88 100644 --- a/InvenTree/part/templates/part/bom_upload/select_fields.html +++ b/InvenTree/part/templates/part/bom_upload/select_fields.html @@ -44,7 +44,7 @@ <div> <input type='hidden' name='col_name_{{ forloop.counter0 }}' value='{{ col.name }}'/> {{ col.name }} - <button class='btn btn-default btn-remove' onClick='removeColFromBomWizard()' id='del_col_{{ forloop.counter0 }}' style='display: inline; float: right;' title='Remove column'> + <button class='btn btn-default btn-remove' onClick='removeColFromBomWizard()' id='del_col_{{ forloop.counter0 }}' style='display: inline; float: right;' title='{% trans "Remove column" %}'> <span col_id='{{ forloop.counter0 }}' class='fas fa-trash-alt icon-red'></span> </button> </div> @@ -73,7 +73,7 @@ {% for row in bom_rows %} <tr> <td> - <button class='btn btn-default btn-remove' onClick='removeRowFromBomWizard()' id='del_row_{{ forloop.counter }}' style='display: inline; float: right;' title='Remove row'> + <button class='btn btn-default btn-remove' onClick='removeRowFromBomWizard()' id='del_row_{{ forloop.counter }}' style='display: inline; float: right;' title='{% trans "Remove row" %}'> <span row_id='{{ forloop.counter }}' class='fas fa-trash-alt icon-red'></span> </button> </td> diff --git a/InvenTree/part/templates/part/params.html b/InvenTree/part/templates/part/params.html index 52b32d0643..b8cb1ae563 100644 --- a/InvenTree/part/templates/part/params.html +++ b/InvenTree/part/templates/part/params.html @@ -65,8 +65,8 @@ reload: true, secondary: [{ field: 'template', - label: 'New Template', - title: 'Create New Parameter Template', + label: '{% trans "New Template" %}', + title: '{% trans "Create New Parameter Template" %}', url: "{% url 'part-param-template-create' %}" }], }); diff --git a/InvenTree/part/templates/part/part_base.html b/InvenTree/part/templates/part/part_base.html index 96c9636c88..f11fe879ce 100644 --- a/InvenTree/part/templates/part/part_base.html +++ b/InvenTree/part/templates/part/part_base.html @@ -246,7 +246,7 @@ launchModalForm( "{% url 'part-pricing' part.id %}", { - submit_text: 'Calculate', + submit_text: '{% trans "Calculate" %}', hideErrorMessage: true, } ); diff --git a/InvenTree/part/templates/part/part_pricing.html b/InvenTree/part/templates/part/part_pricing.html index c0b23ffbd7..7865bb2fbe 100644 --- a/InvenTree/part/templates/part/part_pricing.html +++ b/InvenTree/part/templates/part/part_pricing.html @@ -1,35 +1,37 @@ {% extends "modal_form.html" %} +{% load i18n %} + {% block pre_form_content %} <div class='alert alert-info alert-block'> -Pricing information for:<br> +{% trans 'Pricing information for:' %}<br> {{ part }}. </div> -<h4>Quantity</h4> +<h4>{% trans 'Quantity' %}</h4> <table class='table table-striped table-condensed'> <tr> - <td><b>Part</b></td> + <td><b>{% trans 'Part' %}</b></td> <td colspan='2'>{{ part }}</td> </tr> <tr> - <td><b>Quantity</b></td> + <td><b>{% trans 'Quantity' %}</b></td> <td colspan='2'>{{ quantity }}</td> </tr> </table> {% if part.supplier_count > 0 %} - <h4>Supplier Pricing</h4> + <h4>{% trans 'Supplier Pricing' %}</h4> <table class='table table-striped table-condensed'> {% if min_total_buy_price %} <tr> - <td><b>Unit Cost</b></td> + <td><b>{% trans 'Unit Cost' %}</b></td> <td>Min: {% include "price.html" with price=min_unit_buy_price %}</td> <td>Max: {% include "price.html" with price=max_unit_buy_price %}</td> </tr> {% if quantity > 1 %} <tr> - <td><b>Total Cost</b></td> + <td><b>{% trans 'Total Cost' %}</b></td> <td>Min: {% include "price.html" with price=min_total_buy_price %}</td> <td>Max: {% include "price.html" with price=max_total_buy_price %}</td> </tr> @@ -37,7 +39,7 @@ Pricing information for:<br> {% else %} <tr> <td colspan='3'> - <span class='warning-msg'><i>No supplier pricing available</i></span> + <span class='warning-msg'><i>{% trans 'No supplier pricing available' %}</i></span> </td> </tr> {% endif %} @@ -45,17 +47,17 @@ Pricing information for:<br> {% endif %} {% if part.bom_count > 0 %} - <h4>BOM Pricing</h4> + <h4>{% trans 'BOM Pricing' %}</h4> <table class='table table-striped table-condensed'> {% if min_total_bom_price %} <tr> - <td><b>Unit Cost</b></td> + <td><b>{% trans 'Unit Cost' %}</b></td> <td>Min: {% include "price.html" with price=min_unit_bom_price %}</td> <td>Max: {% include "price.html" with price=max_unit_bom_price %}</td> </tr> {% if quantity > 1 %} <tr> - <td><b>Total Cost</b></td> + <td><b>{% trans 'Total Cost' %}</b></td> <td>Min: {% include "price.html" with price=min_total_bom_price %}</td> <td>Max: {% include "price.html" with price=max_total_bom_price %}</td> </tr> @@ -63,14 +65,14 @@ Pricing information for:<br> {% if part.has_complete_bom_pricing == False %} <tr> <td colspan='3'> - <span class='warning-msg'><i>Note: BOM pricing is incomplete for this part</i></span> + <span class='warning-msg'><i>{% trans 'Note: BOM pricing is incomplete for this part' %}</i></span> </td> </tr> {% endif %} {% else %} <tr> <td colspan='3'> - <span class='warning-msg'><i>No BOM pricing available</i></span> + <span class='warning-msg'><i>{% trans 'No BOM pricing available' %}</i></span> </td> </tr> {% endif %} @@ -80,7 +82,7 @@ Pricing information for:<br> {% if min_unit_buy_price or min_unit_bom_price %} {% else %} <div class='alert alert-danger alert-block'> - No pricing information is available for this part. + {% trans 'No pricing information is available for this part.' %} </div> {% endif %} diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html index f5459dac27..a72b727f69 100644 --- a/InvenTree/stock/templates/stock/item_base.html +++ b/InvenTree/stock/templates/stock/item_base.html @@ -451,7 +451,7 @@ $("#stock-edit").click(function () { "{% url 'stock-item-edit' item.id %}", { reload: true, - submit_text: "Save", + submit_text: '{% trans "Save" %}', } ); }); diff --git a/InvenTree/stock/templates/stock/location.html b/InvenTree/stock/templates/stock/location.html index 5c2b4e04db..74e43f88bb 100644 --- a/InvenTree/stock/templates/stock/location.html +++ b/InvenTree/stock/templates/stock/location.html @@ -160,7 +160,7 @@ $("#stock-export").click(function() { launchModalForm("{% url 'stock-export-options' %}", { - submit_text: "Export", + submit_text: '{% trans "Export" %}', success: function(response) { var url = "{% url 'stock-export' %}"; @@ -188,8 +188,8 @@ secondary: [ { field: 'parent', - label: 'New Location', - title: 'Create new location', + label: '{% trans "New Location" %}', + title: '{% trans "Create new location" %}', url: "{% url 'stock-location-create' %}", }, ] diff --git a/InvenTree/stock/templates/stock/stock_adjust.html b/InvenTree/stock/templates/stock/stock_adjust.html index a72407f735..5ba98231b0 100644 --- a/InvenTree/stock/templates/stock/stock_adjust.html +++ b/InvenTree/stock/templates/stock/stock_adjust.html @@ -40,7 +40,7 @@ <input type='hidden' name='stock-id-{{ item.id }}' value='{{ item.new_quantity }}'/> {% endif %} </td> - <td><button class='btn btn-default btn-remove' onclick='removeStockRow()' id='del-{{ item.id }}' title='Remove item' type='button'><span row='stock-row-{{ item.id }}' class='fas fa-trash-alt icon-red'></span></button></td> + <td><button class='btn btn-default btn-remove' onclick='removeStockRow()' id='del-{{ item.id }}' title='{% trans "Remove item" %}' type='button'><span row='stock-row-{{ item.id }}' class='fas fa-trash-alt icon-red'></span></button></td> </tr> {% endfor %} </table> diff --git a/InvenTree/templates/InvenTree/search.html b/InvenTree/templates/InvenTree/search.html index 5eb755dcb2..b65ec00c00 100644 --- a/InvenTree/templates/InvenTree/search.html +++ b/InvenTree/templates/InvenTree/search.html @@ -133,14 +133,14 @@ InvenTree | {% trans "Search Results" %} columns: [ { field: 'name', - title: 'Name', + title: '{% trans "Name" %}', formatter: function(value, row, index, field) { return renderLink(value, '/part/category/' + row.pk + '/'); }, }, { field: 'description', - title: 'Description', + title: '{% trans "Description" %}', }, ], }); @@ -270,14 +270,14 @@ InvenTree | {% trans "Search Results" %} columns: [ { field: 'name', - title: 'Name', + title: '{% trans "Name" %}', formatter: function(value, row, index, field) { return renderLink(row.pathstring, '/stock/location/' + row.pk + '/'); }, }, { field: 'description', - title: 'Description', + title: '{% trans "Description" %}', }, ], }); diff --git a/InvenTree/templates/js/modals.js b/InvenTree/templates/js/modals.js index 2c246d2a36..004e81c000 100644 --- a/InvenTree/templates/js/modals.js +++ b/InvenTree/templates/js/modals.js @@ -253,7 +253,7 @@ function loadingMessageContent() { */ // TODO - This can be made a lot better - return "<span class='glyphicon glyphicon-refresh glyphicon-refresh-animate'></span> Waiting for server..."; + return "<span class='glyphicon glyphicon-refresh glyphicon-refresh-animate'></span> {% trans 'Waiting for server...' %}"; } diff --git a/InvenTree/templates/js/stock.js b/InvenTree/templates/js/stock.js index bfb539c3c5..02714810e3 100644 --- a/InvenTree/templates/js/stock.js +++ b/InvenTree/templates/js/stock.js @@ -976,8 +976,8 @@ function loadStockTrackingTable(table, options) { formatter: function(value, row, index, field) { // Manually created entries can be edited or deleted if (!row.system) { - var bEdit = "<button title='Edit tracking entry' class='btn btn-entry-edit btn-default btn-glyph' type='button' url='/stock/track/" + row.pk + "/edit/'><span class='fas fa-edit'/></button>"; - var bDel = "<button title='Delete tracking entry' class='btn btn-entry-delete btn-default btn-glyph' type='button' url='/stock/track/" + row.pk + "/delete/'><span class='fas fa-trash-alt icon-red'/></button>"; + var bEdit = "<button title='{% trans 'Edit tracking entry' %}' class='btn btn-entry-edit btn-default btn-glyph' type='button' url='/stock/track/" + row.pk + "/edit/'><span class='fas fa-edit'/></button>"; + var bDel = "<button title='{% trans 'Delete tracking entry' %}' class='btn btn-entry-delete btn-default btn-glyph' type='button' url='/stock/track/" + row.pk + "/delete/'><span class='fas fa-trash-alt icon-red'/></button>"; return "<div class='btn-group' role='group'>" + bEdit + bDel + "</div>"; } else { diff --git a/InvenTree/templates/qr_button.html b/InvenTree/templates/qr_button.html index cc10e0cd26..5ed65d32ab 100644 --- a/InvenTree/templates/qr_button.html +++ b/InvenTree/templates/qr_button.html @@ -1 +1 @@ -<button type='button' class='btn btn-default' id='show-qr-code' title='Show QR code'><span class='fas fa-qrcode'></span></button> \ No newline at end of file +<button type='button' class='btn btn-default' id='show-qr-code' title='{% trans "Show QR Code" %}'><span class='fas fa-qrcode'></span></button> \ No newline at end of file From 1854da380b7e758501261d9731ea86adef338a68 Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sat, 3 Apr 2021 04:07:27 +0200 Subject: [PATCH 05/16] made filters.js dynamic for translation --- InvenTree/InvenTree/urls.py | 1 + InvenTree/templates/base.html | 2 +- .../script/inventree => templates/js}/filters.js | 10 ++++++---- 3 files changed, 8 insertions(+), 5 deletions(-) rename InvenTree/{InvenTree/static/script/inventree => templates/js}/filters.js (94%) diff --git a/InvenTree/InvenTree/urls.py b/InvenTree/InvenTree/urls.py index a9f53a7014..7c22639e65 100644 --- a/InvenTree/InvenTree/urls.py +++ b/InvenTree/InvenTree/urls.py @@ -110,6 +110,7 @@ dynamic_javascript_urls = [ url(r'^stock.js', DynamicJsView.as_view(template_name='js/stock.js'), name='stock.js'), url(r'^tables.js', DynamicJsView.as_view(template_name='js/tables.js'), name='tables.js'), url(r'^table_filters.js', DynamicJsView.as_view(template_name='js/table_filters.js'), name='table_filters.js'), + url(r'^filters.js', DynamicJsView.as_view(template_name='js/filters.js'), name='filters.js'), ] urlpatterns = [ diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index 2120d0ccfb..aa571ef19a 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -139,7 +139,6 @@ InvenTree <script type='text/javascript' src="{% static 'script/inventree/inventree.js' %}"></script> <script type='text/javascript' src="{% static 'script/inventree/api.js' %}"></script> -<script type='text/javascript' src="{% static 'script/inventree/filters.js' %}"></script> <script type='text/javascript' src="{% static 'script/inventree/notification.js' %}"></script> <script type='text/javascript' src="{% static 'script/inventree/sidenav.js' %}"></script> @@ -156,6 +155,7 @@ InvenTree <script type='text/javascript' src="{% url 'calendar.js' %}"></script> <script type='text/javascript' src="{% url 'tables.js' %}"></script> <script type='text/javascript' src="{% url 'table_filters.js' %}"></script> +<script type='text/javascript' src="{% url 'filters.js' %}"></script> <script type='text/javascript' src="{% static 'fontawesome/js/solid.js' %}"></script> <script type='text/javascript' src="{% static 'fontawesome/js/brands.js' %}"></script> diff --git a/InvenTree/InvenTree/static/script/inventree/filters.js b/InvenTree/templates/js/filters.js similarity index 94% rename from InvenTree/InvenTree/static/script/inventree/filters.js rename to InvenTree/templates/js/filters.js index df767441d4..01b74763e0 100644 --- a/InvenTree/InvenTree/static/script/inventree/filters.js +++ b/InvenTree/templates/js/filters.js @@ -1,3 +1,5 @@ +{% load i18n %} + /** * Code for managing query filters / table options. * @@ -188,7 +190,7 @@ function generateAvailableFilterList(tableKey) { var html = `<select class='form-control filter-input' id='${id}' name='tag'>`; - html += `<option value=''>Select filter</option>`; + html += "<option value=''>{% trans 'Select filter' %}</option>"; for (var opt in remaining) { var title = getFilterTitle(tableKey, opt); @@ -263,10 +265,10 @@ function setupFilterList(tableKey, table, target) { // One blank slate, please element.empty(); - element.append(`<button id='${add}' title='Add new filter' class='btn btn-default filter-tag'><span class='fas fa-filter'></span></button>`); + element.append(`<button id='${add}' title='{% trans "Add new filter" %}' class='btn btn-default filter-tag'><span class='fas fa-filter'></span></button>`); if (Object.keys(filters).length > 0) { - element.append(`<button id='${clear}' title='Clear all filters' class='btn btn-default filter-tag'><span class='fas fa-trash-alt'></span></button>`); + element.append(`<button id='${clear}' title='{% trans "Clear all filters" %}' class='btn btn-default filter-tag'><span class='fas fa-trash-alt'></span></button>`); } for (var key in filters) { @@ -291,7 +293,7 @@ function setupFilterList(tableKey, table, target) { html += generateAvailableFilterList(tableKey); html += generateFilterInput(tableKey); - html += `<button title='Create filter' class='btn btn-default filter-tag' id='${make}'><span class='fas fa-plus'></span></button>`; + html += `<button title='{% trans "Create filter" %}' class='btn btn-default filter-tag' id='${make}'><span class='fas fa-plus'></span></button>`; //html += '</div>'; From f67210b20f027efcdce3a77aad08315ca0ea38cf Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sat, 3 Apr 2021 04:11:40 +0200 Subject: [PATCH 06/16] added translation files for changes --- InvenTree/locale/de/LC_MESSAGES/django.po | 1110 +++++++++++++-------- InvenTree/locale/en/LC_MESSAGES/django.po | 894 ++++++++++------- InvenTree/locale/es/LC_MESSAGES/django.po | 894 ++++++++++------- 3 files changed, 1812 insertions(+), 1086 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index d3ad0b4a69..75d6d455e2 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-28 15:13+0000\n" +"POT-Creation-Date: 2021-04-03 02:10+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" "Language-Team: C <kde-i18n-doc@kde.org>\n" @@ -33,7 +33,7 @@ msgstr "Keine passende Aktion gefunden" msgid "Enter date" msgstr "Datum eingeben" -#: InvenTree/forms.py:110 build/forms.py:97 build/forms.py:185 +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:187 msgid "Confirm" msgstr "Bestätigen" @@ -92,47 +92,86 @@ msgstr "" "Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) " "übereinstimmen" +#: InvenTree/models.py:59 stock/models.py:1657 +msgid "Attachment" +msgstr "Anhang" + #: InvenTree/models.py:60 msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "Kommentar" + #: InvenTree/models.py:62 msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:68 +#: InvenTree/models.py:68 InvenTree/models.py:69 #: report/templates/report/inventree_test_report_base.html:91 #: templates/js/stock.js:960 msgid "User" msgstr "Benutzer" -#: InvenTree/models.py:106 label/models.py:101 part/models.py:685 -#: part/templates/part/params.html:27 report/models.py:179 +#: InvenTree/models.py:72 +#, fuzzy +#| msgid "Upload Part Image" +msgid "upload date" +msgstr "Teilbild hochladen" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/templates/part/params.html:27 report/models.py:179 +#: templates/InvenTree/search.html:136 templates/InvenTree/search.html:273 #: templates/js/part.js:109 msgid "Name" msgstr "Name" -#: InvenTree/models.py:112 +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:359 +#: 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 +#: order/templates/order/purchase_order_detail.html:168 part/models.py:710 +#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 +#: report/models.py:192 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 +#: templates/InvenTree/search.html:280 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: 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 +msgid "Description" +msgstr "Beschreibung" + +#: InvenTree/models.py:115 msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/settings.py:445 +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:430 msgid "English" msgstr "Englisch" -#: InvenTree/settings.py:446 +#: InvenTree/settings.py:431 msgid "French" msgstr "Französisch" -#: InvenTree/settings.py:447 +#: InvenTree/settings.py:432 msgid "German" msgstr "Deutsch" -#: InvenTree/settings.py:448 +#: InvenTree/settings.py:433 msgid "Polish" msgstr "Polnisch" -#: InvenTree/settings.py:449 +#: InvenTree/settings.py:434 msgid "Turkish" msgstr "Türkisch" @@ -307,25 +346,34 @@ msgstr "Bauauftrags-Referenz" msgid "Order target date" msgstr "geplantes Bestelldatum" -#: build/forms.py:39 build/models.py:224 +#: build/forms.py:39 build/templates/build/build_base.html:104 +#: build/templates/build/detail.html:121 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "Zieldatum" + +#: build/forms.py:40 build/models.py:224 msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/forms.py:44 -msgid "Number of items to build" -msgstr "Anzahl der zu bauenden Teile" - -#: build/forms.py:85 build/templates/build/auto_allocate.html:17 +#: build/forms.py:45 build/forms.py:87 +#: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:91 #: build/templates/build/detail.html:31 common/models.py:696 -#: company/forms.py:130 company/templates/company/supplier_part_pricing.html:77 -#: order/templates/order/order_wizard/select_parts.html:32 +#: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:237 order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:193 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:12 +#: part/templates/part/part_pricing.html:19 #: part/templates/part/sale_prices.html:85 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -333,62 +381,68 @@ msgstr "Anzahl der zu bauenden Teile" #: report/templates/report/inventree_test_report_base.html:77 #: stock/forms.py:307 stock/templates/stock/item_base.html:51 #: stock/templates/stock/item_base.html:57 -#: stock/templates/stock/item_base.html:234 +#: 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 msgid "Quantity" msgstr "Anzahl" -#: build/forms.py:86 +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "Anzahl der zu bauenden Teile" + +#: build/forms.py:88 msgid "Enter quantity for build output" msgstr "Menge für den Bau-Ausgabe angeben" -#: build/forms.py:90 stock/forms.py:117 -msgid "Serial numbers" -msgstr "Seriennummern" +#: build/forms.py:92 order/forms.py:231 stock/forms.py:117 +#, fuzzy +#| msgid "Serial Number" +msgid "Serial Numbers" +msgstr "Seriennummer" -#: build/forms.py:92 +#: build/forms.py:94 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses hergestelltes Teil eingeben" -#: build/forms.py:98 +#: build/forms.py:100 msgid "Confirm creation of build output" msgstr "Anlage Baufertigstellung bestätigen" -#: build/forms.py:118 +#: build/forms.py:120 msgid "Confirm deletion of build output" msgstr "Löschen des Endprodukt bestätigen" -#: build/forms.py:139 +#: build/forms.py:141 msgid "Confirm unallocation of stock" msgstr "Aufhebung der BestandsZuordnung bestätigen" -#: build/forms.py:163 +#: build/forms.py:165 msgid "Confirm stock allocation" msgstr "Bestandszuordnung bestätigen" -#: build/forms.py:186 +#: build/forms.py:188 msgid "Mark build as complete" msgstr "Bau als vollständig markieren" -#: build/forms.py:210 +#: build/forms.py:212 msgid "Location of completed parts" msgstr "Lagerort der fertigen Teile" -#: build/forms.py:215 +#: build/forms.py:217 msgid "Confirm completion with incomplete stock allocation" msgstr "Fertigstellung mit nicht kompletter Bestandszuordnung bestätigen" -#: build/forms.py:218 +#: build/forms.py:220 msgid "Confirm build completion" msgstr "Bau-Fertigstellung bestätigen" -#: build/forms.py:238 build/views.py:66 +#: build/forms.py:240 build/views.py:66 msgid "Confirm build cancellation" msgstr "Bauabbruch bestätigen" -#: build/forms.py:252 +#: build/forms.py:254 msgid "Select quantity of stock to allocate" msgstr "Menge der BestandsObjekt für Zuordnung auswählen" @@ -405,7 +459,7 @@ msgstr "Bauauftrag" #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:181 #: templates/InvenTree/search.html:169 -#: templates/InvenTree/settings/tabs.html:31 users/models.py:36 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" msgstr "Bauaufträge" @@ -420,24 +474,6 @@ msgstr "Bauauftragsreferenz" msgid "Reference" msgstr "Referenz" -#: build/models.py:134 build/templates/build/detail.html:21 -#: company/models.py:359 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 -#: order/templates/order/purchase_order_detail.html:168 part/models.py:709 -#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 -#: report/models.py:192 -#: report/templates/report/inventree_build_order_base.html:118 -#: templates/InvenTree/search.html:208 -#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 -#: 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 -msgid "Description" -msgstr "Beschreibung" - #: build/models.py:137 msgid "Brief description of the build" msgstr "Kurze Beschreibung des Baus" @@ -456,8 +492,9 @@ msgstr "Bauauftrag, zu dem dieser Bau zugwiesen ist" #: build/templates/build/detail.html:26 order/models.py:662 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:156 -#: order/templates/order/receive_parts.html:19 part/models.py:320 -#: part/templates/part/part_app_base.html:7 part/templates/part/related.html:29 +#: order/templates/order/receive_parts.html:19 part/models.py:321 +#: part/models.py:2054 part/templates/part/part_app_base.html:7 +#: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 @@ -540,110 +577,134 @@ msgstr "Losnummer für dieses Endprodukt" msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:240 +#: build/models.py:227 order/models.py:215 +msgid "Completion Date" +msgstr "Fertigstellungsdatum" + +#: build/models.py:233 +#, fuzzy +#| msgid "Completed" +msgid "completed by" +msgstr "Fertig" + +#: build/models.py:241 +#, fuzzy +#| msgid "Issued By" +msgid "Issued by" +msgstr "Aufgegeben von" + +#: build/models.py:242 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:248 +#: build/models.py:250 build/templates/build/build_base.html:142 +#: build/templates/build/detail.html:105 order/models.py:118 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:885 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "Verantwortlicher Benutzer" + +#: build/models.py:251 msgid "User responsible for this build order" msgstr "Nutzer der für diesen Bauauftrag zuständig ist" -#: build/models.py:253 build/templates/build/detail.html:91 +#: build/models.py:256 build/templates/build/detail.html:91 #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 -#: stock/models.py:423 stock/templates/stock/item_base.html:324 +#: stock/models.py:423 stock/templates/stock/item_base.html:330 msgid "External Link" msgstr "Externer Link" -#: build/models.py:254 part/models.py:743 stock/models.py:425 +#: build/models.py:257 part/models.py:744 stock/models.py:425 msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: build/models.py:258 build/templates/build/navbar.html:59 +#: build/models.py:261 build/templates/build/navbar.html:59 #: company/models.py:366 company/templates/company/navbar.html:59 #: company/templates/company/navbar.html:62 #: order/templates/order/po_navbar.html:29 #: order/templates/order/po_navbar.html:32 #: order/templates/order/purchase_order_detail.html:227 #: order/templates/order/so_navbar.html:33 -#: order/templates/order/so_navbar.html:36 part/models.py:869 +#: order/templates/order/so_navbar.html:36 part/models.py:870 #: part/templates/part/navbar.html:122 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:316 stock/forms.py:348 stock/forms.py:376 stock/models.py:495 -#: stock/models.py:1663 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 +#: stock/models.py:1553 stock/models.py:1663 +#: 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 msgid "Notes" msgstr "Notizen" -#: build/models.py:259 +#: build/models.py:262 msgid "Extra build notes" msgstr "Extranotizen für den Bau" -#: build/models.py:670 +#: build/models.py:673 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:673 +#: build/models.py:676 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:676 +#: build/models.py:679 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:751 +#: build/models.py:754 msgid "Completed build output" msgstr "Endprodukt fertigstellen" -#: build/models.py:993 +#: build/models.py:996 msgid "BuildItem must be unique for build, stock_item and install_into" msgstr "" "Bauauftrags-Objekt muss für Bauauftrag, Lager-Objekt und installiert_in " "eindeutig sein" -#: build/models.py:1015 +#: build/models.py:1018 msgid "Build item must specify a build output" msgstr "Bauauftrags-Objekt muss einem Endprodukt zugewiesen sein" -#: build/models.py:1020 +#: build/models.py:1023 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "Ausgewähltes BestandsObjekt nicht Stückliste für Teil '{p}' gefunden" -#: build/models.py:1024 +#: build/models.py:1027 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" "Reserviermenge ({n}) muss kleiner Bestandsmenge ({q}) sein. Zugewiesene " "Anzahl ({n}) darf nicht die verfügbare ({q}) Anzahl überschreiten" -#: build/models.py:1031 order/models.py:746 +#: build/models.py:1034 order/models.py:751 msgid "StockItem is over-allocated" msgstr "Zu viele BestandsObjekt zugewiesen" -#: build/models.py:1035 order/models.py:749 +#: build/models.py:1038 order/models.py:754 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: build/models.py:1039 +#: build/models.py:1042 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1079 +#: build/models.py:1082 msgid "Build to allocate parts" msgstr "Bau starten um Teile zuzuweisen" -#: build/models.py:1086 +#: build/models.py:1089 msgid "Source stock item" msgstr "Quell-BestandsObjekt" -#: build/models.py:1098 +#: build/models.py:1101 msgid "Stock quantity to allocate to build" msgstr "BestandsObjekt-Anzahl dem Bau zuweisen" -#: build/models.py:1106 +#: build/models.py:1109 msgid "Destination stock item" msgstr "Ziel-BestandsObjekt" @@ -668,7 +729,7 @@ msgid "Order required parts" msgstr "benötigte Teile bestellen" #: build/templates/build/allocate.html:31 -#: company/templates/company/detail_part.html:31 order/views.py:791 +#: company/templates/company/detail_part.html:31 order/views.py:794 #: part/templates/part/category.html:127 msgid "Order Parts" msgstr "Teile bestellen" @@ -713,7 +774,7 @@ msgstr "" "Die folgenden BestandsObjekte werden den ausgewählten Endprodukten zugeordnet" #: build/templates/build/auto_allocate.html:18 stock/forms.py:346 -#: stock/templates/stock/item_base.html:264 +#: stock/templates/stock/item_base.html:270 #: 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 @@ -778,10 +839,12 @@ msgid "Edit Build" msgstr "Bau bearbeiten" #: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:176 msgid "Complete Build" msgstr "Bau fertigstellen" -#: build/templates/build/build_base.html:69 build/views.py:57 +#: build/templates/build/build_base.html:69 +#: build/templates/build/build_base.html:167 build/views.py:57 msgid "Cancel Build" msgstr "Bau abbrechen" @@ -793,23 +856,13 @@ msgstr "Bau-Status" #: build/templates/build/build_base.html:96 #: build/templates/build/detail.html:59 #: order/templates/order/receive_parts.html:24 -#: stock/templates/stock/item_base.html:370 templates/InvenTree/search.html:236 +#: 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 msgid "Status" msgstr "Status" -#: build/templates/build/build_base.html:104 -#: build/templates/build/detail.html:121 -#: order/templates/order/order_base.html:124 -#: order/templates/order/sales_order_base.html:117 -#: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/build.js:723 templates/js/order.js:200 -#: templates/js/order.js:298 -msgid "Target Date" -msgstr "Zieldatum" - #: build/templates/build/build_base.html:108 msgid "This build was due on" msgstr "Fertigung überfällig seit" @@ -827,7 +880,7 @@ msgstr "Fortschritt" #: part/templates/part/allocation.html:30 #: report/templates/report/inventree_build_order_base.html:136 #: report/templates/report/inventree_so_report.html:77 -#: stock/templates/stock/item_base.html:258 templates/js/order.js:245 +#: stock/templates/stock/item_base.html:264 templates/js/order.js:245 msgid "Sales Order" msgstr "Auftrag" @@ -837,14 +890,6 @@ msgstr "Auftrag" msgid "Issued By" msgstr "Aufgegeben von" -#: build/templates/build/build_base.html:142 -#: build/templates/build/detail.html:105 order/models.py:118 -#: order/templates/order/order_base.html:138 -#: order/templates/order/sales_order_base.html:138 -#: report/templates/report/inventree_build_order_base.html:159 -msgid "Responsible" -msgstr "Verantwortlicher Benutzer" - #: build/templates/build/build_children.html:10 #: build/templates/build/navbar.html:42 msgid "Child Build Orders" @@ -951,7 +996,7 @@ msgid "Destination location not specified" msgstr "Ziel-Lagerort nicht angegeben" #: build/templates/build/detail.html:70 -#: stock/templates/stock/item_base.html:282 templates/js/stock.js:632 +#: stock/templates/stock/item_base.html:288 templates/js/stock.js:632 #: templates/js/stock.js:1205 templates/js/table_filters.js:85 #: templates/js/table_filters.js:179 msgid "Batch" @@ -1032,20 +1077,21 @@ msgstr "Bauauftrag-Notizen" msgid "Build Notes" msgstr "Bau-Bemerkungen" -#: build/templates/build/notes.html:23 company/templates/company/notes.html:21 -#: order/templates/order/order_notes.html:24 -#: order/templates/order/sales_order_notes.html:26 -#: part/templates/part/notes.html:25 stock/templates/stock/item_notes.html:23 -msgid "Save" -msgstr "Speichern" - -#: build/templates/build/notes.html:30 company/templates/company/notes.html:29 -#: order/templates/order/order_notes.html:31 -#: order/templates/order/sales_order_notes.html:32 -#: part/templates/part/notes.html:33 stock/templates/stock/item_notes.html:29 +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 msgid "Edit notes" msgstr "Bermerkungen bearbeiten" +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:454 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" +msgstr "Speichern" + #: build/templates/build/unallocate.html:10 msgid "Are you sure you wish to unallocate all stock for this build?" msgstr "" @@ -1188,24 +1234,24 @@ msgstr "Bauobjekt aktualisiert" msgid "Add Build Order Attachment" msgstr "Bauauftrags-Anhang hinzufügen" -#: build/views.py:1062 order/views.py:107 order/views.py:159 part/views.py:172 +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 #: stock/views.py:277 msgid "Added attachment" msgstr "Anhang hinzugefügt" -#: build/views.py:1098 order/views.py:186 order/views.py:207 +#: build/views.py:1098 order/views.py:189 order/views.py:210 msgid "Edit Attachment" msgstr "Anhang bearbeiten" -#: build/views.py:1108 order/views.py:190 order/views.py:211 +#: build/views.py:1108 order/views.py:193 order/views.py:214 msgid "Attachment updated" msgstr "Anhang aktualisiert" -#: build/views.py:1118 order/views.py:226 order/views.py:240 +#: build/views.py:1118 order/views.py:229 order/views.py:243 msgid "Delete Attachment" msgstr "Anhang löschen" -#: build/views.py:1123 order/views.py:232 order/views.py:246 stock/views.py:333 +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 msgid "Deleted attachment" msgstr "Anhang gelöscht" @@ -1321,7 +1367,7 @@ msgstr "Aktuelle Teile-Stände" msgid "Number of recent parts to display on index page" msgstr "Anzahl der neusten Teile auf der Startseite" -#: common/models.py:150 part/templates/part/detail.html:160 +#: common/models.py:150 part/models.py:2056 part/templates/part/detail.html:160 #: report/models.py:185 stock/forms.py:258 templates/js/table_filters.js:24 #: templates/js/table_filters.js:288 msgid "Template" @@ -1331,7 +1377,7 @@ msgstr "Vorlage" msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/models.py:157 part/models.py:832 part/templates/part/detail.html:170 +#: common/models.py:157 part/models.py:833 part/templates/part/detail.html:170 #: templates/js/table_filters.js:101 templates/js/table_filters.js:300 msgid "Assembly" msgstr "Baugruppe" @@ -1340,7 +1386,7 @@ msgstr "Baugruppe" msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/models.py:164 part/models.py:838 part/templates/part/detail.html:180 +#: common/models.py:164 part/models.py:839 part/templates/part/detail.html:180 #: templates/js/table_filters.js:304 msgid "Component" msgstr "Komponente" @@ -1349,7 +1395,7 @@ msgstr "Komponente" msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/models.py:171 part/models.py:849 part/templates/part/detail.html:200 +#: common/models.py:171 part/models.py:850 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "Kaufbar" @@ -1357,7 +1403,7 @@ msgstr "Kaufbar" msgid "Parts are purchaseable by default" msgstr "Artikel kaufbar als Standard" -#: common/models.py:178 part/models.py:854 part/templates/part/detail.html:210 +#: common/models.py:178 part/models.py:855 part/templates/part/detail.html:210 #: templates/js/table_filters.js:312 msgid "Salable" msgstr "Verkäuflich" @@ -1366,7 +1412,7 @@ msgstr "Verkäuflich" msgid "Parts are salable by default" msgstr "Artikel verkaufbar als Standard" -#: common/models.py:185 part/models.py:844 part/templates/part/detail.html:190 +#: common/models.py:185 part/models.py:845 part/templates/part/detail.html:190 #: templates/js/table_filters.js:32 templates/js/table_filters.js:316 msgid "Trackable" msgstr "nachverfolgbar" @@ -1375,7 +1421,7 @@ msgstr "nachverfolgbar" msgid "Parts are trackable by default" msgstr "Artikel verfolgbar als Standard" -#: common/models.py:192 part/models.py:864 part/templates/part/detail.html:150 +#: common/models.py:192 part/models.py:865 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "Virtuell" @@ -1536,7 +1582,7 @@ msgstr "Nur Ganzzahl eingeben" msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:697 company/forms.py:131 +#: common/models.py:697 company/forms.py:132 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" @@ -1569,23 +1615,28 @@ 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:137 +#: company/templates/company/detail.html:40 +msgid "Currency" +msgstr "Währung" + +#: company/forms.py:38 company/models.py:139 msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/forms.py:75 part/forms.py:46 +#: company/forms.py:76 part/forms.py:46 msgid "URL" msgstr "URL" -#: company/forms.py:76 part/forms.py:47 +#: company/forms.py:77 part/forms.py:47 msgid "Image URL" msgstr "Bild-URL" -#: company/forms.py:98 +#: company/forms.py:99 msgid "Single Price" msgstr "Einzelpreis" -#: company/forms.py:100 +#: company/forms.py:101 msgid "Single quantity price" msgstr "Einzelpreis" @@ -1642,28 +1693,42 @@ msgstr "Anlaufstelle" msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" +#: company/models.py:129 +#, fuzzy +#| msgid "Customer" +msgid "is customer" +msgstr "Kunde" + #: company/models.py:129 msgid "Do you sell items to this company?" msgstr "Verkaufen Sie Teile an diese Firma?" +#: company/models.py:131 +#, fuzzy +#| msgid "Supplier" +msgid "is supplier" +msgstr "Zulieferer" + #: company/models.py:131 msgid "Do you purchase items from this company?" msgstr "Kaufen Sie Teile von dieser Firma?" +#: company/models.py:133 +#, fuzzy +#| msgid "Manufacturer" +msgid "is manufacturer" +msgstr "Hersteller" + #: company/models.py:133 msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" -#: company/models.py:137 company/templates/company/detail.html:40 -msgid "Currency" -msgstr "Währung" - #: company/models.py:313 stock/models.py:370 -#: stock/templates/stock/item_base.html:214 +#: stock/templates/stock/item_base.html:220 msgid "Base Part" msgstr "Basisteil" -#: company/models.py:317 +#: company/models.py:317 order/views.py:1372 msgid "Select part" msgstr "Teil auswählen" @@ -1672,7 +1737,7 @@ msgstr "Teil auswählen" #: company/templates/company/supplier_part_detail.html:25 #: order/templates/order/order_base.html:92 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 -#: stock/templates/stock/item_base.html:331 templates/js/company.js:48 +#: stock/templates/stock/item_base.html:337 templates/js/company.js:48 #: templates/js/company.js:164 templates/js/order.js:170 msgid "Supplier" msgstr "Zulieferer" @@ -1713,9 +1778,9 @@ msgstr "MPN" msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: company/models.py:353 part/models.py:742 +#: company/models.py:353 part/models.py:743 #: report/templates/report/inventree_build_order_base.html:165 -#: templates/js/company.js:208 templates/js/part.js:430 +#: stock/models.py:1555 templates/js/company.js:208 templates/js/part.js:430 msgid "Link" msgstr "Link" @@ -1738,10 +1803,22 @@ msgstr "Notiz" msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" +#: company/models.py:371 company/templates/company/supplier_part_base.html:106 +#: stock/models.py:394 stock/templates/stock/item_base.html:295 +#: templates/js/stock.js:663 +msgid "Packaging" +msgstr "Verpackungen" + #: company/models.py:371 msgid "Part packaging" msgstr "Teile-Packaging" +#: company/models.py:373 +#, fuzzy +#| msgid "Order Multiple" +msgid "multiple" +msgstr "Bestellvielfaches" + #: company/templates/company/assigned_stock.html:10 #: company/templates/company/navbar.html:51 #: company/templates/company/navbar.html:54 templates/js/build.js:411 @@ -1764,6 +1841,20 @@ msgstr "Neues Bild hochladen" msgid "Download image from URL" msgstr "Bild von URL herunterladen" +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "Bestellung anlegen" + +#: company/templates/company/company_base.html:51 +#, fuzzy +#| msgid "Edited company information" +msgid "Edit company information" +msgstr "Firmeninformation bearbeitet" + +#: company/templates/company/company_base.html:56 company/views.py:324 +msgid "Delete Company" +msgstr "Firma löschen" + #: company/templates/company/company_base.html:64 #: company/templates/company/detail.html:10 #: company/templates/company/navbar.html:12 @@ -1788,7 +1879,7 @@ msgstr "verwendet Standard-Währung" #: company/templates/company/detail.html:65 #: order/templates/order/sales_order_base.html:92 stock/models.py:412 -#: stock/models.py:413 stock/templates/stock/item_base.html:241 +#: stock/models.py:413 stock/templates/stock/item_base.html:247 #: templates/js/company.js:40 templates/js/order.js:267 msgid "Customer" msgstr "Kunde" @@ -1864,7 +1955,7 @@ msgstr "Zulieferer-Bestand" #: company/templates/company/detail_stock.html:37 #: company/templates/company/supplier_part_stock.html:34 #: part/templates/part/category.html:114 part/templates/part/category.html:128 -#: part/templates/part/stock.html:54 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 msgid "Export" msgstr "Exportieren" @@ -1877,21 +1968,21 @@ msgid "Supplied Parts" msgstr "Zulieferer-Teile" #: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/models.py:321 +#: order/templates/order/receive_parts.html:14 part/models.py:322 #: part/templates/part/cat_link.html:7 part/templates/part/category.html:95 #: part/templates/part/category_navbar.html:11 #: part/templates/part/category_navbar.html:14 #: 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:33 +#: templates/stats.html:35 templates/stats.html:44 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:35 +#: templates/stats.html:48 templates/stats.html:57 users/models.py:40 msgid "Stock Items" msgstr "BestandsObjekte" @@ -1917,7 +2008,7 @@ msgstr "Lagerbestand" #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:226 #: templates/InvenTree/search.html:330 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 -#: users/models.py:38 +#: users/models.py:43 msgid "Sales Orders" msgstr "Aufträge" @@ -1929,7 +2020,7 @@ msgstr "Aufträge" #: part/templates/part/orders.html:10 templates/InvenTree/index.html:203 #: templates/InvenTree/search.html:300 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 -#: users/models.py:37 +#: users/models.py:42 msgid "Purchase Orders" msgstr "Bestellungen" @@ -1986,11 +2077,12 @@ msgstr "Neuer Auftrag" #: company/templates/company/supplier_part_base.html:6 #: company/templates/company/supplier_part_base.html:19 stock/models.py:379 -#: stock/templates/stock/item_base.html:336 templates/js/company.js:180 +#: stock/templates/stock/item_base.html:342 templates/js/company.js:180 msgid "Supplier Part" msgstr "Zulieferer-Teil" #: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_orders.html:17 #: part/templates/part/orders.html:17 part/templates/part/part_base.html:64 msgid "Order part" msgstr "Teil bestellen" @@ -2013,11 +2105,6 @@ msgstr "Zulieferer-Teildetails" msgid "Internal Part" msgstr "Internes Teil" -#: company/templates/company/supplier_part_base.html:106 stock/models.py:394 -#: stock/templates/stock/item_base.html:289 templates/js/stock.js:663 -msgid "Packaging" -msgstr "Verpackungen" - #: company/templates/company/supplier_part_orders.html:18 #: part/templates/part/orders.html:18 msgid "Order Part" @@ -2115,10 +2202,6 @@ msgstr "Neue Firma anlegen" msgid "Created new company" msgstr "Neue Firma angelegt" -#: company/views.py:324 -msgid "Delete Company" -msgstr "Firma löschen" - #: company/views.py:330 msgid "Company was deleted" msgstr "Firma gelöscht" @@ -2196,44 +2279,56 @@ msgstr "Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" msgid "Filters" msgstr "Filter" -#: order/forms.py:25 order/templates/order/order_base.html:47 +#: order/forms.py:27 order/templates/order/order_base.html:47 msgid "Place order" msgstr "Bestellung aufgeben" -#: order/forms.py:36 order/templates/order/order_base.html:54 +#: order/forms.py:38 order/templates/order/order_base.html:54 msgid "Mark order as complete" msgstr "Bestellung als vollständig markieren" -#: order/forms.py:47 order/forms.py:58 order/templates/order/order_base.html:59 +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 #: order/templates/order/sales_order_base.html:59 msgid "Cancel order" msgstr "Bestellung stornieren" -#: order/forms.py:69 order/templates/order/sales_order_base.html:56 +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 msgid "Ship order" msgstr "Bestellung versenden" -#: order/forms.py:80 +#: order/forms.py:82 msgid "Receive parts to this location" msgstr "Teile in diesen Lagerort empfangen" -#: order/forms.py:101 +#: order/forms.py:103 msgid "Purchase Order reference" msgstr "Bestellungs-Referenz" -#: order/forms.py:107 +#: order/forms.py:109 msgid "Target date for order delivery. Order will be overdue after this date." msgstr "Zieldatum für Auftrags-Lieferung." -#: order/forms.py:135 +#: order/forms.py:137 msgid "Enter sales order number" msgstr "Auftrag-Nummer eingeben" -#: order/forms.py:141 order/models.py:448 +#: order/forms.py:143 order/models.py:448 msgid "" "Target date for order completion. Order will be overdue after this date." msgstr "Zieldatum für Auftrags-Fertigstellung." +#: order/forms.py:233 +#, fuzzy +#| msgid "Part stock is tracked by serial number" +msgid "Enter stock item serial numbers" +msgstr "Teilebestand wird per Seriennummer verfolgt" + +#: order/forms.py:239 +#, fuzzy +#| msgid "Select quantity of stock to allocate" +msgid "Enter quantity of stock items" +msgstr "Menge der BestandsObjekt für Zuordnung auswählen" + #: order/models.py:99 msgid "Order reference" msgstr "Bestell-Referenz" @@ -2283,10 +2378,6 @@ msgid "" "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:215 -msgid "Completion Date" -msgstr "Fertigstellungsdatum" - #: order/models.py:216 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" @@ -2335,7 +2426,7 @@ msgstr "Position - Notizen" #: order/models.py:618 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 #: report/templates/report/inventree_po_report.html:77 -#: stock/templates/stock/item_base.html:303 templates/js/order.js:148 +#: stock/templates/stock/item_base.html:309 templates/js/order.js:148 msgid "Purchase Order" msgstr "Bestellung" @@ -2348,7 +2439,7 @@ msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" #: order/models.py:641 stock/models.py:505 -#: stock/templates/stock/item_base.html:310 +#: stock/templates/stock/item_base.html:316 msgid "Purchase Price" msgstr "EK-Preis" @@ -2356,27 +2447,33 @@ msgstr "EK-Preis" msgid "Unit purchase price" msgstr "EK-Preis pro Einheit" -#: order/models.py:737 +#: order/models.py:736 order/models.py:738 +#, fuzzy +#| msgid "Stock item has been allocated" +msgid "Stock item has not been assigned" +msgstr "BestandsObjekt zugewiesen" + +#: order/models.py:742 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kann BestandsObjekt keiner Zeile mit einem anderen Teil hinzufügen" -#: order/models.py:739 +#: order/models.py:744 msgid "Cannot allocate stock to a line without a part" msgstr "Kann BestandsObjekt keiner Zeile ohne Teil hinzufügen" -#: order/models.py:742 +#: order/models.py:747 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:752 +#: order/models.py:757 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für BestandsObjekt mit Seriennummer muss 1 sein" -#: order/models.py:768 +#: order/models.py:773 msgid "Select stock item to allocate" msgstr "BestandsObjekt für Zuordnung auswählen" -#: order/models.py:771 +#: order/models.py:776 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" @@ -2392,6 +2489,7 @@ msgid "Print" msgstr "Drucken" #: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 msgid "Edit order information" msgstr "Bestellinfos bearbeiten" @@ -2464,6 +2562,11 @@ msgstr "Zulieferer auswählen" msgid "Select a supplier for" msgstr "Zulieferer auswählen für" +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "Teil entfernen" + #: order/templates/order/order_wizard/select_pos.html:8 msgid "Step 2 of 2 - Select Purchase Orders" msgstr "Schritt 2 von 2 - Bestellung auswählen" @@ -2481,6 +2584,12 @@ msgstr "Positionen" msgid "Select Purchase Order" msgstr "Bestellung auswählen" +#: order/templates/order/order_wizard/select_pos.html:45 +#, fuzzy +#| msgid "Create new purchase order" +msgid "Create new purchase order for {{ supplier.name }}" +msgstr "Neue Bestellung anlegen" + #: order/templates/order/order_wizard/select_pos.html:68 msgid "Select a purchase order for" msgstr "Bestellung auswählen für" @@ -2504,15 +2613,16 @@ msgid "Purchase Order Items" msgstr "Bestellungs-Positionen" #: order/templates/order/purchase_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:22 order/views.py:1105 -#: order/views.py:1188 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 msgid "Add Line Item" 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 -#: templates/js/stock.js:704 templates/js/stock.js:1088 +#: stock/templates/stock/location.html:191 templates/js/stock.js:704 +#: templates/js/stock.js:1088 msgid "New Location" msgstr "Neuer Lagerort" @@ -2531,7 +2641,7 @@ msgid "Unit Price" msgstr "Stück-Preis" #: order/templates/order/purchase_order_detail.html:239 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/sales_order_detail.html:294 msgid "Edit line item" msgstr "Position bearbeiten" @@ -2573,6 +2683,12 @@ msgstr "Empfangen" msgid "Error: Referenced part has been removed" msgstr "Fehler: verknüpftes Teil wurde gelöscht" +#: order/templates/order/receive_parts.html:57 +#, fuzzy +#| msgid "Remove allocation" +msgid "Remove line" +msgstr "Zuordnung entfernen" + #: order/templates/order/sales_order_base.html:15 msgid "This SalesOrder has not been fully allocated" msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" @@ -2604,7 +2720,7 @@ msgstr "Auftrags-Positionen" #: order/templates/order/sales_order_detail.html:75 #: order/templates/order/sales_order_detail.html:157 #: report/templates/report/inventree_test_report_base.html:75 -#: stock/models.py:417 stock/templates/stock/item_base.html:228 +#: stock/models.py:417 stock/templates/stock/item_base.html:234 #: templates/js/build.js:418 msgid "Serial Number" msgstr "Seriennummer" @@ -2619,8 +2735,8 @@ msgstr "Bestands-Zuordnung bearbeiten" msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" -#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 -#: templates/js/build.js:785 +#: order/templates/order/sales_order_detail.html:229 order/views.py:1351 +#: templates/js/build.js:523 templates/js/build.js:785 msgid "Allocated" msgstr "Zugeordnet" @@ -2629,18 +2745,27 @@ msgid "Fulfilled" msgstr "Erledigt" #: order/templates/order/sales_order_detail.html:279 -msgid "Buy parts" -msgstr "Teile kaufen" +#, fuzzy +#| msgid "Add serial number" +msgid "Allocate serial numbers" +msgstr "Seriennummer hinzufügen" -#: order/templates/order/sales_order_detail.html:283 -msgid "Build parts" -msgstr "Bauteile" +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" +msgstr "Lagerbestand zuweisen" -#: order/templates/order/sales_order_detail.html:286 -msgid "Allocate parts" -msgstr "Teile zuordnen" +#: order/templates/order/sales_order_detail.html:285 +#, fuzzy +#| msgid "Purchase Price" +msgid "Purchase stock" +msgstr "EK-Preis" -#: order/templates/order/sales_order_detail.html:290 +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "Baue Bestand" + +#: order/templates/order/sales_order_detail.html:295 msgid "Delete line item " msgstr "Position löschen " @@ -2674,6 +2799,12 @@ msgstr "" "Versenden dieses Auftrags bedeutet, dass der Auftrag nicht mehr bearbeitbar " "ist." +#: order/templates/order/so_allocate_by_serial.html:9 +#, fuzzy +#| msgid "Part stock is tracked by serial number" +msgid "Allocate stock items by serial number" +msgstr "Teilebestand wird per Seriennummer verfolgt" + #: order/templates/order/so_allocation_delete.html:7 msgid "This action will unallocate the following stock from the Sales Order" msgstr "Diese Aktion wird die folgenden BestandsObjekt vom Auftrag entfernen" @@ -2687,140 +2818,172 @@ msgstr "Auftrags-Anhänge" msgid "Are you sure you wish to delete this line item?" msgstr "Sind Sie sicher, dass Sie diese Position löschen möchten?" -#: order/views.py:96 +#: order/views.py:99 msgid "Add Purchase Order Attachment" msgstr "Bestellungs-Anhang hinzufügen" -#: order/views.py:146 +#: order/views.py:149 msgid "Add Sales Order Attachment" msgstr "Auftrags-Anhang hinzufügen" -#: order/views.py:303 -msgid "Create Purchase Order" -msgstr "Bestellung anlegen" - -#: order/views.py:338 +#: order/views.py:341 msgid "Create Sales Order" msgstr "Auftrag anlegen" -#: order/views.py:373 +#: order/views.py:376 msgid "Edit Purchase Order" msgstr "Bestellung bearbeiten" -#: order/views.py:393 +#: order/views.py:396 msgid "Edit Sales Order" msgstr "Auftrag bearbeiten" -#: order/views.py:409 +#: order/views.py:412 msgid "Cancel Order" msgstr "Bestellung stornieren" -#: order/views.py:418 order/views.py:444 +#: order/views.py:421 order/views.py:447 msgid "Confirm order cancellation" msgstr "Bestellstornierung bestätigen" -#: order/views.py:421 order/views.py:447 +#: order/views.py:424 order/views.py:450 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/views.py:435 +#: order/views.py:438 msgid "Cancel sales order" msgstr "Auftrag stornieren" -#: order/views.py:461 +#: order/views.py:464 msgid "Issue Order" msgstr "Bestellung aufgeben" -#: order/views.py:470 +#: order/views.py:473 msgid "Confirm order placement" msgstr "Bestellungstätigung bestätigen" -#: order/views.py:480 +#: order/views.py:483 msgid "Purchase order issued" msgstr "Bestellung erstellt" -#: order/views.py:491 +#: order/views.py:494 msgid "Complete Order" msgstr "Auftrag fertigstellen" -#: order/views.py:507 +#: order/views.py:510 msgid "Confirm order completion" msgstr "Fertigstellung bestätigen" -#: order/views.py:518 +#: order/views.py:521 msgid "Purchase order completed" msgstr "Bestellung als vollständig markieren" -#: order/views.py:528 +#: order/views.py:531 msgid "Ship Order" msgstr "Versenden" -#: order/views.py:544 +#: order/views.py:547 msgid "Confirm order shipment" msgstr "Versand bestätigen" -#: order/views.py:550 +#: order/views.py:553 msgid "Could not ship order" msgstr "Versand fehlgeschlagen" -#: order/views.py:604 +#: order/views.py:607 msgid "Receive Parts" msgstr "Teile empfangen" -#: order/views.py:674 +#: order/views.py:677 msgid "Items received" msgstr "Anzahl empfangener Positionen" -#: order/views.py:688 +#: order/views.py:691 msgid "No destination set" msgstr "Kein Ziel gesetzt" -#: order/views.py:733 +#: order/views.py:736 msgid "Error converting quantity to number" msgstr "Fehler beim Konvertieren zu Zahl" -#: order/views.py:739 +#: order/views.py:742 msgid "Receive quantity less than zero" msgstr "Anzahl kleiner null empfangen" -#: order/views.py:745 +#: order/views.py:748 msgid "No lines specified" msgstr "Keine Zeilen angegeben" -#: order/views.py:1114 +#: order/views.py:1117 msgid "Supplier part must be specified" msgstr "Zulieferer-Teil muss ausgewählt werden" -#: order/views.py:1120 +#: order/views.py:1123 msgid "Supplier must match for Part and Order" msgstr "Zulieferer muss zu Teil und Bestellung passen" -#: order/views.py:1239 order/views.py:1257 +#: order/views.py:1242 order/views.py:1260 msgid "Edit Line Item" msgstr "Position bearbeiten" -#: order/views.py:1273 order/views.py:1285 +#: order/views.py:1276 order/views.py:1288 msgid "Delete Line Item" msgstr "Position löschen" -#: order/views.py:1278 order/views.py:1290 +#: order/views.py:1281 order/views.py:1293 msgid "Deleted line item" msgstr "Position gelöscht" -#: order/views.py:1299 +#: order/views.py:1306 +#, fuzzy +#| msgid "Latest Serial Number" +msgid "Allocate Serial Numbers" +msgstr "letzte Seriennummer" + +#: order/views.py:1351 +#, fuzzy +#| msgid "Items" +msgid "items" +msgstr "Positionen" + +#: order/views.py:1367 +#, fuzzy +#| msgid "Delete line item" +msgid "Select line item" +msgstr "Position löschen" + +#: order/views.py:1398 +#, fuzzy +#| msgid "No matching stock item found" +msgid "No matching item for serial" +msgstr "Keine passende BestandsObjekt gefunden" + +#: order/views.py:1408 +#, fuzzy +#| msgid "Count stock" +msgid "is not in stock" +msgstr "Bestand zählen" + +#: order/views.py:1416 +#, fuzzy +#| msgid "Allocated to Orders" +msgid "already allocated to an order" +msgstr "zu Bauaufträgen zugeordnet" + +#: order/views.py:1470 msgid "Allocate Stock to Order" msgstr "Lagerbestand dem Auftrag zuweisen" -#: order/views.py:1373 +#: order/views.py:1544 msgid "Edit Allocation Quantity" msgstr "Zuordnung bearbeiten" -#: order/views.py:1388 +#: order/views.py:1559 msgid "Remove allocation" msgstr "Zuordnung entfernen" -#: part/bom.py:138 part/models.py:760 part/templates/part/category.html:62 -#: part/templates/part/detail.html:90 +#: part/bom.py:138 part/models.py:72 part/models.py:761 +#: part/templates/part/category.html:62 part/templates/part/detail.html:90 msgid "Default Location" msgstr "Standard-Lagerort" @@ -2890,7 +3053,7 @@ msgstr "Zulieferer einschließen" msgid "Include part supplier data in exported BOM" msgstr "Zulieferer-Daten in Stückliste-Export einschließen" -#: part/forms.py:120 part/models.py:2053 +#: part/forms.py:120 part/models.py:2054 msgid "Parent Part" msgstr "Ausgangsteil" @@ -2962,326 +3125,363 @@ msgstr "Parameter-Vorlage zu allen Kategorien hinzufügen" msgid "Input quantity for price calculation" msgstr "Eintragsmenge zur Preisberechnung" -#: part/models.py:72 +#: part/models.py:73 msgid "Default location for parts in this category" msgstr "Standard-Lagerort für Teile dieser Kategorie" -#: part/models.py:75 +#: part/models.py:76 +#, fuzzy +#| msgid "Default Currency" +msgid "Default keywords" +msgstr "Standard-Währung" + +#: part/models.py:76 msgid "Default keywords for parts in this category" msgstr "Standard-Stichworte für Teile dieser Kategorie" -#: part/models.py:81 part/models.py:2098 +#: part/models.py:82 part/models.py:2099 #: part/templates/part/part_app_base.html:9 msgid "Part Category" msgstr "Teilkategorie" -#: part/models.py:82 part/templates/part/category.html:19 +#: 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 -#: users/models.py:32 +#: users/models.py:37 msgid "Part Categories" msgstr "Teile-Kategorien" -#: part/models.py:445 part/models.py:457 +#: part/models.py:446 part/models.py:458 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "Teil '{p1}' wird in Stückliste für Teil '{p2}' benutzt (rekursiv)" -#: part/models.py:554 +#: part/models.py:555 msgid "Next available serial numbers are" msgstr "Nächste verfügbare Seriennummern wären" -#: part/models.py:558 +#: part/models.py:559 msgid "Next available serial number is" msgstr "Nächste verfügbare Seriennummer ist" -#: part/models.py:563 +#: part/models.py:564 msgid "Most recent serial number is" msgstr "Die neuste Seriennummer ist" -#: part/models.py:642 +#: part/models.py:643 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:653 +#: part/models.py:654 msgid "Part must be unique for name, IPN and revision" msgstr "Namen, Teile- und Revisionsnummern müssen eindeutig sein" -#: part/models.py:684 part/templates/part/detail.html:22 +#: part/models.py:685 part/templates/part/detail.html:22 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:691 +#: part/models.py:692 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:692 +#: part/models.py:693 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:703 +#: part/models.py:704 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:704 part/templates/part/detail.html:60 +#: part/models.py:705 part/templates/part/detail.html:60 msgid "Variant Of" msgstr "Variante von" -#: part/models.py:710 +#: part/models.py:711 msgid "Part description" msgstr "Beschreibung des Teils" -#: part/models.py:715 part/templates/part/category.html:69 +#: part/models.py:716 part/templates/part/category.html:69 #: part/templates/part/detail.html:67 msgid "Keywords" msgstr "Schlüsselwörter" -#: part/models.py:716 +#: part/models.py:717 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:723 part/templates/part/detail.html:73 +#: part/models.py:724 part/templates/part/detail.html:73 #: part/templates/part/set_category.html:15 templates/js/part.js:384 msgid "Category" msgstr "Kategorie" -#: part/models.py:724 +#: part/models.py:725 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:729 part/templates/part/detail.html:28 +#: part/models.py:730 part/templates/part/detail.html:28 #: part/templates/part/part_base.html:93 templates/js/part.js:160 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/models.py:730 +#: part/models.py:731 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: part/models.py:736 +#: part/models.py:737 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:737 part/templates/part/detail.html:35 report/models.py:198 +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 #: templates/js/part.js:164 msgid "Revision" msgstr "Revision" -#: part/models.py:758 +#: part/models.py:759 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:805 part/templates/part/detail.html:97 +#: part/models.py:806 part/templates/part/detail.html:97 msgid "Default Supplier" msgstr "Standard Zulieferer" -#: part/models.py:806 +#: part/models.py:807 msgid "Default supplier part" msgstr "Standard Zulieferer-Teil" -#: part/models.py:813 +#: part/models.py:814 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:814 +#: part/models.py:815 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Lagerbestand dieses Teils" -#: part/models.py:819 part/templates/part/detail.html:113 +#: part/models.py:820 part/templates/part/detail.html:113 msgid "Minimum Stock" msgstr "Minimaler Lagerbestand" -#: part/models.py:820 +#: part/models.py:821 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Lagerbestand" -#: part/models.py:826 part/templates/part/detail.html:106 +#: part/models.py:827 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "Einheiten" -#: part/models.py:827 +#: part/models.py:828 msgid "Stock keeping units for this part" msgstr "Stock Keeping Units (SKU) für dieses Teil" -#: part/models.py:833 +#: part/models.py:834 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:839 +#: part/models.py:840 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bau von anderen genutzt werden?" -#: part/models.py:845 +#: part/models.py:846 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:850 +#: part/models.py:851 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:855 +#: part/models.py:856 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:859 part/templates/part/detail.html:227 +#: part/models.py:860 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 #: templates/js/table_filters.js:214 templates/js/table_filters.js:283 msgid "Active" msgstr "Aktiv" -#: part/models.py:860 +#: part/models.py:861 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:865 +#: part/models.py:866 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ist dieses Teil virtuell, wie zum Beispiel eine Software oder Lizenz?" -#: part/models.py:870 +#: part/models.py:871 msgid "Part notes - supports Markdown formatting" msgstr "Bemerkungen - unterstüzt Markdown-Formatierung" -#: part/models.py:873 +#: part/models.py:874 +#, fuzzy +#| msgid "BOM line checksum" +msgid "BOM checksum" +msgstr "Prüfsumme der Stückliste" + +#: part/models.py:874 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1926 +#: part/models.py:877 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:879 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:881 part/templates/part/detail.html:126 +#: templates/js/order.js:293 +msgid "Creation Date" +msgstr "Erstelldatum" + +#: part/models.py:883 +#, fuzzy +#| msgid "Creation Date" +msgid "Creation User" +msgstr "Erstelldatum" + +#: part/models.py:1927 msgid "Test templates can only be created for trackable parts" msgstr "Test-Vorlagen können nur für verfolgbare Teile angelegt werden" -#: part/models.py:1943 +#: part/models.py:1944 msgid "Test with this name already exists for this part" msgstr "Ein Test mit diesem Namen besteht bereits für dieses Teil" -#: part/models.py:1962 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1963 templates/js/part.js:561 templates/js/stock.js:104 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:1963 +#: part/models.py:1964 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:1968 +#: part/models.py:1969 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:1969 +#: part/models.py:1970 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:1974 templates/js/part.js:570 +#: part/models.py:1975 templates/js/part.js:570 #: templates/js/table_filters.js:200 msgid "Required" msgstr "benötigt" -#: part/models.py:1975 +#: part/models.py:1976 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:1980 templates/js/part.js:578 +#: part/models.py:1981 templates/js/part.js:578 msgid "Requires Value" msgstr "verpflichtender Wert" -#: part/models.py:1981 +#: part/models.py:1982 msgid "Does this test require a value when adding a test result?" msgstr "" "Muss für diesen Test ein Wert für das Test-Ergebnis eingetragen werden?" -#: part/models.py:1986 templates/js/part.js:585 +#: part/models.py:1987 templates/js/part.js:585 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:1987 +#: part/models.py:1988 msgid "Does this test require a file attachment when adding a test result?" msgstr "" "Muss für diesen Test ein Anhang für das Test-Ergebnis hinzugefügt werden?" -#: part/models.py:2020 +#: part/models.py:2021 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:2025 +#: part/models.py:2026 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:2027 +#: part/models.py:2028 msgid "Parameter Units" msgstr "Parameter Einheit" -#: part/models.py:2055 part/models.py:2103 +#: part/models.py:2056 part/models.py:2104 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:2057 +#: part/models.py:2058 +#, fuzzy +#| msgid "Test Data" +msgid "Data" +msgstr "Testdaten" + +#: part/models.py:2058 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:2107 +#: part/models.py:2108 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:2135 +#: part/models.py:2136 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:2143 +#: part/models.py:2144 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:2149 +#: part/models.py:2150 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:2151 +#: part/models.py:2152 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:2154 +#: part/models.py:2155 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:2157 +#: part/models.py:2158 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:2160 +#: part/models.py:2161 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:2162 +#: part/models.py:2163 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:2166 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2167 templates/js/bom.js:275 templates/js/bom.js:282 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "Geerbt" -#: part/models.py:2167 +#: part/models.py:2168 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" "Diese Stücklisten-Position wird in dei Stücklisten von Teil-Varianten vererbt" -#: part/models.py:2243 part/views.py:1592 part/views.py:1644 +#: part/models.py:2244 part/views.py:1592 part/views.py:1644 #: stock/models.py:259 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:2252 part/models.py:2254 +#: part/models.py:2253 part/models.py:2255 msgid "Sub part must be specified" msgstr "Zulieferer-Teil muss festgelegt sein" -#: part/models.py:2257 +#: part/models.py:2258 msgid "BOM Item" msgstr "Stücklisten-Position" -#: part/models.py:2378 +#: part/models.py:2379 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:2410 +#: part/models.py:2411 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3304,7 +3504,7 @@ msgstr "Bestellung" #: part/templates/part/allocation.html:49 #: stock/templates/stock/item_base.html:8 #: stock/templates/stock/item_base.html:89 -#: stock/templates/stock/item_base.html:318 +#: 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 msgid "Stock Item" @@ -3404,6 +3604,12 @@ msgstr "Auswahl übertragen" msgid "File Fields" msgstr "Datei-Felder" +#: part/templates/part/bom_upload/select_fields.html:47 +#, fuzzy +#| msgid "Remove row" +msgid "Remove column" +msgstr "Zeile entfernen" + #: part/templates/part/bom_upload/select_fields.html:58 msgid "Match Fields" msgstr "Übereinstimmende Felder" @@ -3412,6 +3618,11 @@ msgstr "Übereinstimmende Felder" msgid "Duplicate column selection" msgstr "Spalte doppelt ausgewählt" +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "Zeile entfernen" + #: part/templates/part/bom_upload/select_parts.html:16 msgid "Step 3 - Select Parts" msgstr "Schritt 3 - Teile auswählen" @@ -3433,10 +3644,6 @@ msgstr "Zeile" msgid "Select Part" msgstr "Teil auswählen" -#: part/templates/part/bom_upload/select_parts.html:58 -msgid "Remove row" -msgstr "Zeile entfernen" - #: part/templates/part/bom_upload/select_parts.html:65 #: part/templates/part/category.html:117 msgid "Create new part" @@ -3523,7 +3730,8 @@ msgstr "Teilkategorie auswählen" msgid "Export Data" msgstr "Exportieren" -#: part/templates/part/category.html:198 templates/js/stock.js:705 +#: part/templates/part/category.html:198 +#: stock/templates/stock/location.html:192 templates/js/stock.js:705 msgid "Create new location" msgstr "Neuen Lagerort anlegen" @@ -3638,10 +3846,6 @@ msgstr "Keine Seriennummern gefunden" msgid "Stock Expiry Time" msgstr "Bestands-Ablauf Zeit" -#: part/templates/part/detail.html:126 templates/js/order.js:293 -msgid "Creation Date" -msgstr "Erstelldatum" - #: part/templates/part/detail.html:132 msgid "Created By" msgstr "Erstellt von" @@ -3742,7 +3946,7 @@ msgstr "VK-Preis" msgid "Part Test Templates" msgstr "Teil Test-Vorlagen" -#: part/templates/part/navbar.html:103 stock/templates/stock/item_base.html:376 +#: part/templates/part/navbar.html:103 stock/templates/stock/item_base.html:382 msgid "Tests" msgstr "Tests" @@ -3777,10 +3981,22 @@ msgid "Edit" msgstr "Bearbeiten" #: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 users/models.py:170 +#: part/templates/part/supplier.html:22 users/models.py:175 msgid "Delete" msgstr "Löschen" +#: part/templates/part/params.html:68 +#, fuzzy +#| msgid "Template" +msgid "New Template" +msgstr "Vorlage" + +#: part/templates/part/params.html:69 +#, fuzzy +#| msgid "Create Part Parameter Template" +msgid "Create New Parameter Template" +msgstr "Teilparametervorlage anlegen" + #: part/templates/part/part_app_base.html:11 msgid "Part List" msgstr "Teileliste" @@ -3806,7 +4022,7 @@ msgstr "Barcode Aktionen" #: part/templates/part/part_base.html:48 #: stock/templates/stock/item_base.html:129 -#: stock/templates/stock/location.html:46 +#: stock/templates/stock/location.html:46 templates/qr_button.html:1 msgid "Show QR Code" msgstr "QR-Code anzeigen" @@ -3864,6 +4080,64 @@ msgstr "Herstellbar" msgid "Building" msgstr "Im Bau" +#: part/templates/part/part_base.html:249 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +#, fuzzy +#| msgid "Pricing Information" +msgid "Pricing information for:" +msgstr "Preisinformationen ansehen" + +#: part/templates/part/part_pricing.html:24 +#, fuzzy +#| msgid "Supplier Part Pricing" +msgid "Supplier Pricing" +msgstr "Zulieferer-Teil Bepreisung" + +#: part/templates/part/part_pricing.html:28 +#: part/templates/part/part_pricing.html:54 +#, fuzzy +#| msgid "Units" +msgid "Unit Cost" +msgstr "Einheiten" + +#: part/templates/part/part_pricing.html:34 +#: part/templates/part/part_pricing.html:60 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:42 +#, fuzzy +#| msgid "No pricing available" +msgid "No supplier pricing available" +msgstr "Keine Preisinformation verfügbar" + +#: part/templates/part/part_pricing.html:50 +#, fuzzy +#| msgid "BOM Price" +msgid "BOM Pricing" +msgstr "Stücklistenpreis" + +#: part/templates/part/part_pricing.html:68 +#, fuzzy +#| msgid "BOM pricing is incomplete" +msgid "Note: BOM pricing is incomplete for this part" +msgstr "Stücklistenbepreisung ist unvollständig" + +#: part/templates/part/part_pricing.html:75 +#, fuzzy +#| msgid "No pricing available" +msgid "No BOM pricing available" +msgstr "Keine Preisinformation verfügbar" + +#: part/templates/part/part_pricing.html:85 +#, fuzzy +#| msgid "No price breaks have been added for this part" +msgid "No pricing information is available for this part." +msgstr "Keine Preisstaffelung für dieses Teil" + #: part/templates/part/part_tests.html:17 msgid "Add Test Template" msgstr "Test Vorlage hinzufügen" @@ -3892,10 +4166,6 @@ msgstr "Neue Bestellung" msgid "Set category for the following parts" msgstr "Kategorie für Teile setzen" -#: part/templates/part/set_category.html:32 -msgid "Remove part" -msgstr "Teil entfernen" - #: part/templates/part/stock.html:10 msgid "Part Stock" msgstr "Teilbestand" @@ -4188,7 +4458,9 @@ msgstr "Report Vorlage ist ein" #: report/models.py:295 msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "BestandsObjekte-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" +msgstr "" +"BestandsObjekte-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-" +"Paaren)" #: report/models.py:303 msgid "Include Installed Tests" @@ -4400,7 +4672,7 @@ msgstr "Wo wird dieses Teil normalerweise gelagert?" msgid "Packaging this stock item is stored in" msgstr "Die Verpackung dieses BestandsObjekt ist gelagert in" -#: stock/models.py:400 stock/templates/stock/item_base.html:249 +#: stock/models.py:400 stock/templates/stock/item_base.html:255 msgid "Installed In" msgstr "verbaut in" @@ -4440,7 +4712,7 @@ msgstr "Bestellung für dieses BestandsObjekt" msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:472 stock/templates/stock/item_base.html:343 +#: stock/models.py:472 stock/templates/stock/item_base.html:349 #: templates/js/stock.js:652 msgid "Expiry Date" msgstr "Ablaufdatum" @@ -4535,6 +4807,10 @@ msgstr "aufteilen vom vorhandenen Bestand" msgid "StockItem cannot be moved as it is not in stock" msgstr "BestandsObjekt kann nicht bewegt werden, da kein Bestand vorhanden ist" +#: stock/models.py:1551 +msgid "Title" +msgstr "Titel" + #: stock/models.py:1551 msgid "Tracking entry title" msgstr "Objektverfolgung - Name des Eintrags" @@ -4567,10 +4843,6 @@ msgstr "Testergebnis" msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:1657 -msgid "Attachment" -msgstr "Anhang" - #: stock/models.py:1658 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" @@ -4640,12 +4912,12 @@ msgstr "" "aufgebraucht ist." #: stock/templates/stock/item_base.html:91 -#: stock/templates/stock/item_base.html:347 templates/js/table_filters.js:123 +#: stock/templates/stock/item_base.html:353 templates/js/table_filters.js:123 msgid "Expired" msgstr "abgelaufen" #: stock/templates/stock/item_base.html:95 -#: stock/templates/stock/item_base.html:349 templates/js/table_filters.js:128 +#: stock/templates/stock/item_base.html:355 templates/js/table_filters.js:128 msgid "Stale" msgstr "überfällig" @@ -4680,97 +4952,97 @@ msgstr "Bestands-Anpassungs Aktionen" msgid "Count stock" msgstr "Bestand zählen" -#: stock/templates/stock/item_base.html:161 templates/stock_table.html:53 +#: stock/templates/stock/item_base.html:163 templates/stock_table.html:53 msgid "Add stock" msgstr "Bestand hinzufügen" -#: stock/templates/stock/item_base.html:162 templates/stock_table.html:54 +#: stock/templates/stock/item_base.html:166 templates/stock_table.html:54 msgid "Remove stock" msgstr "Bestand entfernen" -#: stock/templates/stock/item_base.html:164 +#: stock/templates/stock/item_base.html:169 msgid "Transfer stock" msgstr "Bestand verschieben" -#: stock/templates/stock/item_base.html:166 +#: stock/templates/stock/item_base.html:172 msgid "Serialize stock" msgstr "Lagerbestand serialisieren" -#: stock/templates/stock/item_base.html:170 +#: stock/templates/stock/item_base.html:176 msgid "Assign to customer" msgstr "zu Kunden zuordnen" -#: stock/templates/stock/item_base.html:173 +#: stock/templates/stock/item_base.html:179 msgid "Return to stock" msgstr "zu Bestand zurückgeben" -#: stock/templates/stock/item_base.html:177 templates/js/stock.js:1218 +#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1218 msgid "Uninstall stock item" msgstr "BestandsObjekt deinstallieren" -#: stock/templates/stock/item_base.html:177 +#: stock/templates/stock/item_base.html:183 msgid "Uninstall" msgstr "Deinstallieren" -#: stock/templates/stock/item_base.html:186 +#: stock/templates/stock/item_base.html:192 #: stock/templates/stock/location.html:55 msgid "Stock actions" msgstr "Bestands-Aktionen" -#: stock/templates/stock/item_base.html:189 +#: stock/templates/stock/item_base.html:195 msgid "Convert to variant" msgstr "in Variante ändern" -#: stock/templates/stock/item_base.html:192 +#: stock/templates/stock/item_base.html:198 msgid "Duplicate stock item" msgstr "BestandsObjekt duplizieren" -#: stock/templates/stock/item_base.html:194 +#: stock/templates/stock/item_base.html:200 msgid "Edit stock item" msgstr "BestandsObjekt bearbeiten" -#: stock/templates/stock/item_base.html:197 +#: stock/templates/stock/item_base.html:203 msgid "Delete stock item" msgstr "BestandsObjekt löschen" -#: stock/templates/stock/item_base.html:209 +#: stock/templates/stock/item_base.html:215 msgid "Stock Item Details" msgstr "BestandsObjekt-Details" -#: stock/templates/stock/item_base.html:268 templates/js/build.js:442 +#: stock/templates/stock/item_base.html:274 templates/js/build.js:442 msgid "No location set" msgstr "Kein Lagerort gesetzt" -#: stock/templates/stock/item_base.html:275 +#: stock/templates/stock/item_base.html:281 msgid "Barcode Identifier" msgstr "Barcode-Bezeichner" -#: stock/templates/stock/item_base.html:296 templates/InvenTree/search.html:167 +#: stock/templates/stock/item_base.html:302 templates/InvenTree/search.html:167 #: templates/js/build.js:655 templates/navbar.html:29 msgid "Build" msgstr "Bau" -#: stock/templates/stock/item_base.html:317 +#: stock/templates/stock/item_base.html:323 msgid "Parent Item" msgstr "Elternposition" -#: stock/templates/stock/item_base.html:347 +#: stock/templates/stock/item_base.html:353 msgid "This StockItem expired on" msgstr "Dieses BestandsObjekt lief ab am" -#: stock/templates/stock/item_base.html:349 +#: stock/templates/stock/item_base.html:355 msgid "This StockItem expires on" msgstr "Dieses BestandsObjekt läuft ab am" -#: stock/templates/stock/item_base.html:356 templates/js/stock.js:658 +#: stock/templates/stock/item_base.html:362 templates/js/stock.js:658 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: stock/templates/stock/item_base.html:361 +#: stock/templates/stock/item_base.html:367 msgid "Last Stocktake" msgstr "Letzte Inventur" -#: stock/templates/stock/item_base.html:365 +#: stock/templates/stock/item_base.html:371 msgid "No stocktake performed" msgstr "Keine Inventur ausgeführt" @@ -4881,7 +5153,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:34 +#: templates/stats.html:52 users/models.py:39 msgid "Stock Locations" msgstr "Bestand-Lagerorte" @@ -4921,6 +5193,12 @@ msgstr "Kindobjekte" msgid "Children" msgstr "Kinder" +#: stock/templates/stock/stock_adjust.html:43 +#, fuzzy +#| msgid "Remove stock item" +msgid "Remove item" +msgstr "BestandsObjekt entfernen" + #: stock/templates/stock/stock_app_base.html:15 msgid "Loading..." msgstr "Lade..." @@ -5426,10 +5704,6 @@ msgstr "Anhang hinzufügen" msgid "File" msgstr "Datei" -#: templates/attachment_table.html:16 -msgid "Comment" -msgstr "Kommentar" - #: templates/attachment_table.html:17 msgid "Uploaded" msgstr "Hochgeladen" @@ -5617,19 +5891,11 @@ msgstr "benötigter Teil" msgid "Quantity Per" msgstr "Anzahl pro" -#: templates/js/build.js:578 templates/js/build.js:992 -msgid "Build stock" -msgstr "Baue Bestand" - #: templates/js/build.js:582 templates/js/build.js:996 #: templates/stock_table.html:57 msgid "Order stock" msgstr "Bestand bestellen" -#: templates/js/build.js:585 -msgid "Allocate stock" -msgstr "Lagerbestand zuweisen" - #: templates/js/build.js:632 msgid "No builds matching query" msgstr "Keine Baue passen zur Anfrage" @@ -5671,6 +5937,30 @@ msgstr "Vorlagenteil" msgid "Assembled part" msgstr "Baugruppe" +#: templates/js/filters.js:193 +#, fuzzy +#| msgid "Select Category" +msgid "Select filter" +msgstr "Kategorie auswählen" + +#: templates/js/filters.js:268 +#, fuzzy +#| msgid "Add new parameter" +msgid "Add new filter" +msgstr "Parameter hinzufügen" + +#: templates/js/filters.js:271 +#, fuzzy +#| msgid "Part Filters" +msgid "Clear all filters" +msgstr "Teil Filter" + +#: templates/js/filters.js:296 +#, fuzzy +#| msgid "Create Variant" +msgid "Create filter" +msgstr "Variante anlegen" + #: templates/js/label.js:10 templates/js/report.js:98 msgid "Select Stock Items" msgstr "BestandsObjekte auswählen" @@ -5712,6 +6002,10 @@ msgstr "Label auswählen" msgid "Select Label Template" msgstr "Label-Vorlage auswählen" +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + #: templates/js/modals.js:406 msgid "Show Error Information" msgstr "Fehler-Informationen anzeigen" @@ -6060,6 +6354,18 @@ msgstr "Status Code muss ausgewählt werden" msgid "No user information" msgstr "Keine Benutzerinformation" +#: templates/js/stock.js:979 +#, fuzzy +#| msgid "Edit Stock Tracking Entry" +msgid "Edit tracking entry" +msgstr "Lagerbestands-Tracking-Eintrag bearbeiten" + +#: templates/js/stock.js:980 +#, fuzzy +#| msgid "Delete Stock Tracking Entry" +msgid "Delete tracking entry" +msgstr "Lagerbestands-Tracking-Eintrag löschen" + #: templates/js/stock.js:1089 msgid "Create New Location" msgstr "Neuen Lagerort anlegen" @@ -6306,7 +6612,7 @@ msgstr "Barcode scannen" msgid "InvenTree server issues detected" msgstr "InvenTree Server Fehler aufgetreten" -#: templates/navbar.html:69 users/models.py:31 +#: templates/navbar.html:69 users/models.py:36 msgid "Admin" msgstr "Admin" @@ -6458,42 +6764,54 @@ msgstr "Berechtigungen" msgid "Important dates" msgstr "wichtige Daten" -#: users/models.py:153 +#: users/models.py:158 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:161 +#: users/models.py:166 msgid "Group" msgstr "Gruppe" -#: users/models.py:164 +#: users/models.py:169 msgid "View" msgstr "Ansicht" -#: users/models.py:164 +#: users/models.py:169 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:166 +#: users/models.py:171 msgid "Add" msgstr "Hinzufügen" -#: users/models.py:166 +#: users/models.py:171 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:168 +#: users/models.py:173 msgid "Change" msgstr "Ändern" -#: users/models.py:168 +#: users/models.py:173 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:170 +#: users/models.py:175 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" +#~ msgid "Serial numbers" +#~ msgstr "Seriennummern" + +#~ msgid "Buy parts" +#~ msgstr "Teile kaufen" + +#~ msgid "Build parts" +#~ msgstr "Bauteile" + +#~ msgid "Allocate parts" +#~ msgstr "Teile zuordnen" + #, fuzzy #~| msgid "Part is not a virtual part" #~ msgid "This part is a virtual part" @@ -6607,12 +6925,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Database Statistics" #~ msgstr "Datenbankstatistiken" -#~ msgid "BOM Price" -#~ msgstr "Stücklistenpreis" - -#~ msgid "BOM pricing is incomplete" -#~ msgstr "Stücklistenbepreisung ist unvollständig" - #~ msgid "No pricing information" #~ msgstr "Keine Preisinformation" @@ -6673,11 +6985,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "New Currency" #~ msgstr "Währung entfernen" -#, fuzzy -#~| msgid "Serial Number" -#~ msgid "Serial Numbers" -#~ msgstr "Seriennummer" - #~ msgid "Automatically allocate stock" #~ msgstr "Lagerbestand automatisch zuweisen" @@ -6776,9 +7083,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ "Teile werden automatisch zugewiesen, wenn nur ein BestandsObjekt " #~ "verfügbar ist" -#~ msgid "Title" -#~ msgstr "Titel" - #~ msgid "Allocate new Part" #~ msgstr "Neues Teil zuordnen" @@ -6841,18 +7145,12 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Uninstall selected stock items" #~ msgstr "Vorrat zu {n} BestandsObjekten hinzugefügt" -#~ msgid "Order Multiple" -#~ msgstr "Bestellvielfaches" - #~ msgid "Base Price (Flat Fee)" #~ msgstr "Grundpreis" #~ msgid "New Price Break" #~ msgstr "Neue Preisstaffelung" -#~ msgid "No price breaks have been added for this part" -#~ msgstr "Keine Preisstaffelung für dieses Teil" - #~ msgid "Part cannot be added to its own Bill of Materials" #~ msgstr "Teil kann nicht zu seiner eigenen Stückliste hinzugefügt werden" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index d229c67b45..7fe67bf929 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-28 16:04+0000\n" +"POT-Creation-Date: 2021-04-03 02:10+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" @@ -34,7 +34,7 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/forms.py:110 build/forms.py:97 build/forms.py:185 +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:187 msgid "Confirm" msgstr "" @@ -91,47 +91,84 @@ msgstr "" msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" +#: InvenTree/models.py:59 stock/models.py:1657 +msgid "Attachment" +msgstr "" + #: InvenTree/models.py:60 msgid "Select file to attach" msgstr "" +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "" + #: InvenTree/models.py:62 msgid "File comment" msgstr "" -#: InvenTree/models.py:68 +#: InvenTree/models.py:68 InvenTree/models.py:69 #: report/templates/report/inventree_test_report_base.html:91 #: templates/js/stock.js:960 msgid "User" msgstr "" -#: InvenTree/models.py:106 label/models.py:101 part/models.py:685 -#: part/templates/part/params.html:27 report/models.py:179 +#: InvenTree/models.py:72 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/templates/part/params.html:27 report/models.py:179 +#: templates/InvenTree/search.html:136 templates/InvenTree/search.html:273 #: templates/js/part.js:109 msgid "Name" msgstr "" -#: InvenTree/models.py:112 +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:359 +#: 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 +#: order/templates/order/purchase_order_detail.html:168 part/models.py:710 +#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 +#: report/models.py:192 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 +#: templates/InvenTree/search.html:280 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: 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 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:115 msgid "Description (optional)" msgstr "" -#: InvenTree/settings.py:445 +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:430 msgid "English" msgstr "" -#: InvenTree/settings.py:446 +#: InvenTree/settings.py:431 msgid "French" msgstr "" -#: InvenTree/settings.py:447 +#: InvenTree/settings.py:432 msgid "German" msgstr "" -#: InvenTree/settings.py:448 +#: InvenTree/settings.py:433 msgid "Polish" msgstr "" -#: InvenTree/settings.py:449 +#: InvenTree/settings.py:434 msgid "Turkish" msgstr "" @@ -306,25 +343,34 @@ msgstr "" msgid "Order target date" msgstr "" -#: build/forms.py:39 build/models.py:224 +#: build/forms.py:39 build/templates/build/build_base.html:104 +#: build/templates/build/detail.html:121 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "" + +#: build/forms.py:40 build/models.py:224 msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/forms.py:44 -msgid "Number of items to build" -msgstr "" - -#: build/forms.py:85 build/templates/build/auto_allocate.html:17 +#: build/forms.py:45 build/forms.py:87 +#: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:91 #: build/templates/build/detail.html:31 common/models.py:696 -#: company/forms.py:130 company/templates/company/supplier_part_pricing.html:77 -#: order/templates/order/order_wizard/select_parts.html:32 +#: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:237 order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:193 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:12 +#: part/templates/part/part_pricing.html:19 #: part/templates/part/sale_prices.html:85 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -339,55 +385,59 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/forms.py:86 +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "" + +#: build/forms.py:88 msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:90 stock/forms.py:117 -msgid "Serial numbers" +#: build/forms.py:92 order/forms.py:231 stock/forms.py:117 +msgid "Serial Numbers" msgstr "" -#: build/forms.py:92 +#: build/forms.py:94 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/forms.py:98 +#: build/forms.py:100 msgid "Confirm creation of build output" msgstr "" -#: build/forms.py:118 +#: build/forms.py:120 msgid "Confirm deletion of build output" msgstr "" -#: build/forms.py:139 +#: build/forms.py:141 msgid "Confirm unallocation of stock" msgstr "" -#: build/forms.py:163 +#: build/forms.py:165 msgid "Confirm stock allocation" msgstr "" -#: build/forms.py:186 +#: build/forms.py:188 msgid "Mark build as complete" msgstr "" -#: build/forms.py:210 +#: build/forms.py:212 msgid "Location of completed parts" msgstr "" -#: build/forms.py:215 +#: build/forms.py:217 msgid "Confirm completion with incomplete stock allocation" msgstr "" -#: build/forms.py:218 +#: build/forms.py:220 msgid "Confirm build completion" msgstr "" -#: build/forms.py:238 build/views.py:66 +#: build/forms.py:240 build/views.py:66 msgid "Confirm build cancellation" msgstr "" -#: build/forms.py:252 +#: build/forms.py:254 msgid "Select quantity of stock to allocate" msgstr "" @@ -404,7 +454,7 @@ msgstr "" #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:181 #: templates/InvenTree/search.html:169 -#: templates/InvenTree/settings/tabs.html:31 users/models.py:36 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" msgstr "" @@ -419,24 +469,6 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:134 build/templates/build/detail.html:21 -#: company/models.py:359 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 -#: order/templates/order/purchase_order_detail.html:168 part/models.py:709 -#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 -#: report/models.py:192 -#: report/templates/report/inventree_build_order_base.html:118 -#: templates/InvenTree/search.html:208 -#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 -#: 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 -msgid "Description" -msgstr "" - #: build/models.py:137 msgid "Brief description of the build" msgstr "" @@ -455,8 +487,9 @@ msgstr "" #: build/templates/build/detail.html:26 order/models.py:662 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:156 -#: order/templates/order/receive_parts.html:19 part/models.py:320 -#: part/templates/part/part_app_base.html:7 part/templates/part/related.html:29 +#: order/templates/order/receive_parts.html:19 part/models.py:321 +#: part/models.py:2054 part/templates/part/part_app_base.html:7 +#: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 @@ -537,15 +570,35 @@ msgstr "" msgid "Target completion date" msgstr "" -#: build/models.py:240 +#: build/models.py:227 order/models.py:215 +msgid "Completion Date" +msgstr "" + +#: build/models.py:233 +msgid "completed by" +msgstr "" + +#: build/models.py:241 +msgid "Issued by" +msgstr "" + +#: build/models.py:242 msgid "User who issued this build order" msgstr "" -#: build/models.py:248 +#: build/models.py:250 build/templates/build/build_base.html:142 +#: build/templates/build/detail.html:105 order/models.py:118 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:885 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "" + +#: build/models.py:251 msgid "User responsible for this build order" msgstr "" -#: build/models.py:253 build/templates/build/detail.html:91 +#: build/models.py:256 build/templates/build/detail.html:91 #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 @@ -553,90 +606,90 @@ msgstr "" msgid "External Link" msgstr "" -#: build/models.py:254 part/models.py:743 stock/models.py:425 +#: build/models.py:257 part/models.py:744 stock/models.py:425 msgid "Link to external URL" msgstr "" -#: build/models.py:258 build/templates/build/navbar.html:59 +#: build/models.py:261 build/templates/build/navbar.html:59 #: company/models.py:366 company/templates/company/navbar.html:59 #: company/templates/company/navbar.html:62 #: order/templates/order/po_navbar.html:29 #: order/templates/order/po_navbar.html:32 #: order/templates/order/purchase_order_detail.html:227 #: order/templates/order/so_navbar.html:33 -#: order/templates/order/so_navbar.html:36 part/models.py:869 +#: order/templates/order/so_navbar.html:36 part/models.py:870 #: part/templates/part/navbar.html:122 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:316 stock/forms.py:348 stock/forms.py:376 stock/models.py:495 -#: stock/models.py:1663 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 +#: stock/models.py:1553 stock/models.py:1663 +#: 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 msgid "Notes" msgstr "" -#: build/models.py:259 +#: build/models.py:262 msgid "Extra build notes" msgstr "" -#: build/models.py:670 +#: build/models.py:673 msgid "No build output specified" msgstr "" -#: build/models.py:673 +#: build/models.py:676 msgid "Build output is already completed" msgstr "" -#: build/models.py:676 +#: build/models.py:679 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:751 +#: build/models.py:754 msgid "Completed build output" msgstr "" -#: build/models.py:993 +#: build/models.py:996 msgid "BuildItem must be unique for build, stock_item and install_into" msgstr "" -#: build/models.py:1015 +#: build/models.py:1018 msgid "Build item must specify a build output" msgstr "" -#: build/models.py:1020 +#: build/models.py:1023 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "" -#: build/models.py:1024 +#: build/models.py:1027 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/models.py:1031 order/models.py:746 +#: build/models.py:1034 order/models.py:751 msgid "StockItem is over-allocated" msgstr "" -#: build/models.py:1035 order/models.py:749 +#: build/models.py:1038 order/models.py:754 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1039 +#: build/models.py:1042 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1079 +#: build/models.py:1082 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1086 +#: build/models.py:1089 msgid "Source stock item" msgstr "" -#: build/models.py:1098 +#: build/models.py:1101 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1106 +#: build/models.py:1109 msgid "Destination stock item" msgstr "" @@ -661,7 +714,7 @@ msgid "Order required parts" msgstr "" #: build/templates/build/allocate.html:31 -#: company/templates/company/detail_part.html:31 order/views.py:791 +#: company/templates/company/detail_part.html:31 order/views.py:794 #: part/templates/part/category.html:127 msgid "Order Parts" msgstr "" @@ -768,10 +821,12 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:176 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:69 build/views.py:57 +#: build/templates/build/build_base.html:69 +#: build/templates/build/build_base.html:167 build/views.py:57 msgid "Cancel Build" msgstr "" @@ -790,16 +845,6 @@ msgstr "" msgid "Status" msgstr "" -#: build/templates/build/build_base.html:104 -#: build/templates/build/detail.html:121 -#: order/templates/order/order_base.html:124 -#: order/templates/order/sales_order_base.html:117 -#: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/build.js:723 templates/js/order.js:200 -#: templates/js/order.js:298 -msgid "Target Date" -msgstr "" - #: build/templates/build/build_base.html:108 msgid "This build was due on" msgstr "" @@ -827,14 +872,6 @@ msgstr "" msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:142 -#: build/templates/build/detail.html:105 order/models.py:118 -#: order/templates/order/order_base.html:138 -#: order/templates/order/sales_order_base.html:138 -#: report/templates/report/inventree_build_order_base.html:159 -msgid "Responsible" -msgstr "" - #: build/templates/build/build_children.html:10 #: build/templates/build/navbar.html:42 msgid "Child Build Orders" @@ -1019,18 +1056,19 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/notes.html:23 company/templates/company/notes.html:21 -#: order/templates/order/order_notes.html:24 -#: order/templates/order/sales_order_notes.html:26 -#: part/templates/part/notes.html:25 stock/templates/stock/item_notes.html:23 -msgid "Save" +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 +msgid "Edit notes" msgstr "" -#: build/templates/build/notes.html:30 company/templates/company/notes.html:29 -#: order/templates/order/order_notes.html:31 -#: order/templates/order/sales_order_notes.html:32 -#: part/templates/part/notes.html:33 stock/templates/stock/item_notes.html:29 -msgid "Edit notes" +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:454 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" msgstr "" #: build/templates/build/unallocate.html:10 @@ -1170,24 +1208,24 @@ msgstr "" msgid "Add Build Order Attachment" msgstr "" -#: build/views.py:1062 order/views.py:107 order/views.py:159 part/views.py:172 +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 #: stock/views.py:277 msgid "Added attachment" msgstr "" -#: build/views.py:1098 order/views.py:186 order/views.py:207 +#: build/views.py:1098 order/views.py:189 order/views.py:210 msgid "Edit Attachment" msgstr "" -#: build/views.py:1108 order/views.py:190 order/views.py:211 +#: build/views.py:1108 order/views.py:193 order/views.py:214 msgid "Attachment updated" msgstr "" -#: build/views.py:1118 order/views.py:226 order/views.py:240 +#: build/views.py:1118 order/views.py:229 order/views.py:243 msgid "Delete Attachment" msgstr "" -#: build/views.py:1123 order/views.py:232 order/views.py:246 stock/views.py:333 +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 msgid "Deleted attachment" msgstr "" @@ -1303,7 +1341,7 @@ msgstr "" msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:150 part/templates/part/detail.html:160 +#: common/models.py:150 part/models.py:2056 part/templates/part/detail.html:160 #: report/models.py:185 stock/forms.py:258 templates/js/table_filters.js:24 #: templates/js/table_filters.js:288 msgid "Template" @@ -1313,7 +1351,7 @@ msgstr "" msgid "Parts are templates by default" msgstr "" -#: common/models.py:157 part/models.py:832 part/templates/part/detail.html:170 +#: common/models.py:157 part/models.py:833 part/templates/part/detail.html:170 #: templates/js/table_filters.js:101 templates/js/table_filters.js:300 msgid "Assembly" msgstr "" @@ -1322,7 +1360,7 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:164 part/models.py:838 part/templates/part/detail.html:180 +#: common/models.py:164 part/models.py:839 part/templates/part/detail.html:180 #: templates/js/table_filters.js:304 msgid "Component" msgstr "" @@ -1331,7 +1369,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:171 part/models.py:849 part/templates/part/detail.html:200 +#: common/models.py:171 part/models.py:850 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "" @@ -1339,7 +1377,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:178 part/models.py:854 part/templates/part/detail.html:210 +#: common/models.py:178 part/models.py:855 part/templates/part/detail.html:210 #: templates/js/table_filters.js:312 msgid "Salable" msgstr "" @@ -1348,7 +1386,7 @@ msgstr "" msgid "Parts are salable by default" msgstr "" -#: common/models.py:185 part/models.py:844 part/templates/part/detail.html:190 +#: common/models.py:185 part/models.py:845 part/templates/part/detail.html:190 #: templates/js/table_filters.js:32 templates/js/table_filters.js:316 msgid "Trackable" msgstr "" @@ -1357,7 +1395,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/models.py:192 part/models.py:864 part/templates/part/detail.html:150 +#: common/models.py:192 part/models.py:865 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "" @@ -1514,7 +1552,7 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:697 company/forms.py:131 +#: common/models.py:697 company/forms.py:132 msgid "Price break quantity" msgstr "" @@ -1547,23 +1585,28 @@ msgstr "" msgid "Supplied value must be a boolean" msgstr "" -#: company/forms.py:37 company/models.py:139 +#: company/forms.py:37 company/models.py:137 +#: company/templates/company/detail.html:40 +msgid "Currency" +msgstr "" + +#: company/forms.py:38 company/models.py:139 msgid "Default currency used for this company" msgstr "" -#: company/forms.py:75 part/forms.py:46 +#: company/forms.py:76 part/forms.py:46 msgid "URL" msgstr "" -#: company/forms.py:76 part/forms.py:47 +#: company/forms.py:77 part/forms.py:47 msgid "Image URL" msgstr "" -#: company/forms.py:98 +#: company/forms.py:99 msgid "Single Price" msgstr "" -#: company/forms.py:100 +#: company/forms.py:101 msgid "Single quantity price" msgstr "" @@ -1620,20 +1663,28 @@ msgstr "" msgid "Link to external company information" msgstr "" +#: company/models.py:129 +msgid "is customer" +msgstr "" + #: company/models.py:129 msgid "Do you sell items to this company?" msgstr "" +#: company/models.py:131 +msgid "is supplier" +msgstr "" + #: company/models.py:131 msgid "Do you purchase items from this company?" msgstr "" #: company/models.py:133 -msgid "Does this company manufacture parts?" +msgid "is manufacturer" msgstr "" -#: company/models.py:137 company/templates/company/detail.html:40 -msgid "Currency" +#: company/models.py:133 +msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:313 stock/models.py:370 @@ -1641,7 +1692,7 @@ msgstr "" msgid "Base Part" msgstr "" -#: company/models.py:317 +#: company/models.py:317 order/views.py:1372 msgid "Select part" msgstr "" @@ -1691,9 +1742,9 @@ msgstr "" msgid "Manufacturer part number" msgstr "" -#: company/models.py:353 part/models.py:742 +#: company/models.py:353 part/models.py:743 #: report/templates/report/inventree_build_order_base.html:165 -#: templates/js/company.js:208 templates/js/part.js:430 +#: stock/models.py:1555 templates/js/company.js:208 templates/js/part.js:430 msgid "Link" msgstr "" @@ -1716,10 +1767,20 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" +#: company/models.py:371 company/templates/company/supplier_part_base.html:106 +#: stock/models.py:394 stock/templates/stock/item_base.html:295 +#: templates/js/stock.js:663 +msgid "Packaging" +msgstr "" + #: company/models.py:371 msgid "Part packaging" msgstr "" +#: company/models.py:373 +msgid "multiple" +msgstr "" + #: company/templates/company/assigned_stock.html:10 #: company/templates/company/navbar.html:51 #: company/templates/company/navbar.html:54 templates/js/build.js:411 @@ -1742,6 +1803,18 @@ msgstr "" msgid "Download image from URL" msgstr "" +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:51 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:56 company/views.py:324 +msgid "Delete Company" +msgstr "" + #: company/templates/company/company_base.html:64 #: company/templates/company/detail.html:10 #: company/templates/company/navbar.html:12 @@ -1842,7 +1915,7 @@ msgstr "" #: company/templates/company/detail_stock.html:37 #: company/templates/company/supplier_part_stock.html:34 #: part/templates/part/category.html:114 part/templates/part/category.html:128 -#: part/templates/part/stock.html:54 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 msgid "Export" msgstr "" @@ -1855,21 +1928,21 @@ msgid "Supplied Parts" msgstr "" #: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/models.py:321 +#: order/templates/order/receive_parts.html:14 part/models.py:322 #: part/templates/part/cat_link.html:7 part/templates/part/category.html:95 #: part/templates/part/category_navbar.html:11 #: part/templates/part/category_navbar.html:14 #: 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:33 +#: templates/stats.html:35 templates/stats.html:44 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:35 +#: templates/stats.html:48 templates/stats.html:57 users/models.py:40 msgid "Stock Items" msgstr "" @@ -1895,7 +1968,7 @@ msgstr "" #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:226 #: templates/InvenTree/search.html:330 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 -#: users/models.py:38 +#: users/models.py:43 msgid "Sales Orders" msgstr "" @@ -1907,7 +1980,7 @@ msgstr "" #: part/templates/part/orders.html:10 templates/InvenTree/index.html:203 #: templates/InvenTree/search.html:300 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 -#: users/models.py:37 +#: users/models.py:42 msgid "Purchase Orders" msgstr "" @@ -1968,6 +2041,7 @@ msgid "Supplier Part" msgstr "" #: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_orders.html:17 #: part/templates/part/orders.html:17 part/templates/part/part_base.html:64 msgid "Order part" msgstr "" @@ -1990,11 +2064,6 @@ msgstr "" msgid "Internal Part" msgstr "" -#: company/templates/company/supplier_part_base.html:106 stock/models.py:394 -#: stock/templates/stock/item_base.html:295 templates/js/stock.js:663 -msgid "Packaging" -msgstr "" - #: company/templates/company/supplier_part_orders.html:18 #: part/templates/part/orders.html:18 msgid "Order Part" @@ -2092,10 +2161,6 @@ msgstr "" msgid "Created new company" msgstr "" -#: company/views.py:324 -msgid "Delete Company" -msgstr "" - #: company/views.py:330 msgid "Company was deleted" msgstr "" @@ -2173,44 +2238,52 @@ msgstr "" msgid "Filters" msgstr "" -#: order/forms.py:25 order/templates/order/order_base.html:47 +#: order/forms.py:27 order/templates/order/order_base.html:47 msgid "Place order" msgstr "" -#: order/forms.py:36 order/templates/order/order_base.html:54 +#: order/forms.py:38 order/templates/order/order_base.html:54 msgid "Mark order as complete" msgstr "" -#: order/forms.py:47 order/forms.py:58 order/templates/order/order_base.html:59 +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 #: order/templates/order/sales_order_base.html:59 msgid "Cancel order" msgstr "" -#: order/forms.py:69 order/templates/order/sales_order_base.html:56 +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 msgid "Ship order" msgstr "" -#: order/forms.py:80 +#: order/forms.py:82 msgid "Receive parts to this location" msgstr "" -#: order/forms.py:101 +#: order/forms.py:103 msgid "Purchase Order reference" msgstr "" -#: order/forms.py:107 +#: order/forms.py:109 msgid "Target date for order delivery. Order will be overdue after this date." msgstr "" -#: order/forms.py:135 +#: order/forms.py:137 msgid "Enter sales order number" msgstr "" -#: order/forms.py:141 order/models.py:448 +#: order/forms.py:143 order/models.py:448 msgid "" "Target date for order completion. Order will be overdue after this date." msgstr "" +#: order/forms.py:233 +msgid "Enter stock item serial numbers" +msgstr "" + +#: order/forms.py:239 +msgid "Enter quantity of stock items" +msgstr "" + #: order/models.py:99 msgid "Order reference" msgstr "" @@ -2260,10 +2333,6 @@ msgid "" "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:215 -msgid "Completion Date" -msgstr "" - #: order/models.py:216 msgid "Date order was completed" msgstr "" @@ -2333,27 +2402,31 @@ msgstr "" msgid "Unit purchase price" msgstr "" -#: order/models.py:737 -msgid "Cannot allocate stock item to a line with a different part" -msgstr "" - -#: order/models.py:739 -msgid "Cannot allocate stock to a line without a part" +#: order/models.py:736 order/models.py:738 +msgid "Stock item has not been assigned" msgstr "" #: order/models.py:742 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:744 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:747 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:752 +#: order/models.py:757 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:768 +#: order/models.py:773 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:771 +#: order/models.py:776 msgid "Enter stock allocation quantity" msgstr "" @@ -2369,6 +2442,7 @@ msgid "Print" msgstr "" #: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 msgid "Edit order information" msgstr "" @@ -2440,6 +2514,11 @@ msgstr "" msgid "Select a supplier for" msgstr "" +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "" + #: order/templates/order/order_wizard/select_pos.html:8 msgid "Step 2 of 2 - Select Purchase Orders" msgstr "" @@ -2457,6 +2536,10 @@ msgstr "" msgid "Select Purchase Order" msgstr "" +#: order/templates/order/order_wizard/select_pos.html:45 +msgid "Create new purchase order for {{ supplier.name }}" +msgstr "" + #: order/templates/order/order_wizard/select_pos.html:68 msgid "Select a purchase order for" msgstr "" @@ -2480,15 +2563,16 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:22 order/views.py:1105 -#: order/views.py:1188 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 msgid "Add Line Item" 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 -#: templates/js/stock.js:704 templates/js/stock.js:1088 +#: stock/templates/stock/location.html:191 templates/js/stock.js:704 +#: templates/js/stock.js:1088 msgid "New Location" msgstr "" @@ -2507,7 +2591,7 @@ msgid "Unit Price" msgstr "" #: order/templates/order/purchase_order_detail.html:239 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/sales_order_detail.html:294 msgid "Edit line item" msgstr "" @@ -2549,6 +2633,10 @@ msgstr "" msgid "Error: Referenced part has been removed" msgstr "" +#: order/templates/order/receive_parts.html:57 +msgid "Remove line" +msgstr "" + #: order/templates/order/sales_order_base.html:15 msgid "This SalesOrder has not been fully allocated" msgstr "" @@ -2595,8 +2683,8 @@ msgstr "" msgid "Delete stock allocation" msgstr "" -#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 -#: templates/js/build.js:785 +#: order/templates/order/sales_order_detail.html:229 order/views.py:1351 +#: templates/js/build.js:523 templates/js/build.js:785 msgid "Allocated" msgstr "" @@ -2605,18 +2693,23 @@ msgid "Fulfilled" msgstr "" #: order/templates/order/sales_order_detail.html:279 -msgid "Buy parts" +msgid "Allocate serial numbers" msgstr "" -#: order/templates/order/sales_order_detail.html:283 -msgid "Build parts" +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" msgstr "" -#: order/templates/order/sales_order_detail.html:286 -msgid "Allocate parts" +#: order/templates/order/sales_order_detail.html:285 +msgid "Purchase stock" msgstr "" -#: order/templates/order/sales_order_detail.html:290 +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:295 msgid "Delete line item " msgstr "" @@ -2646,6 +2739,10 @@ msgstr "" msgid "Shipping this order means that the order will no longer be editable." msgstr "" +#: order/templates/order/so_allocate_by_serial.html:9 +msgid "Allocate stock items by serial number" +msgstr "" + #: order/templates/order/so_allocation_delete.html:7 msgid "This action will unallocate the following stock from the Sales Order" msgstr "" @@ -2659,140 +2756,160 @@ msgstr "" msgid "Are you sure you wish to delete this line item?" msgstr "" -#: order/views.py:96 +#: order/views.py:99 msgid "Add Purchase Order Attachment" msgstr "" -#: order/views.py:146 +#: order/views.py:149 msgid "Add Sales Order Attachment" msgstr "" -#: order/views.py:303 -msgid "Create Purchase Order" -msgstr "" - -#: order/views.py:338 +#: order/views.py:341 msgid "Create Sales Order" msgstr "" -#: order/views.py:373 +#: order/views.py:376 msgid "Edit Purchase Order" msgstr "" -#: order/views.py:393 +#: order/views.py:396 msgid "Edit Sales Order" msgstr "" -#: order/views.py:409 +#: order/views.py:412 msgid "Cancel Order" msgstr "" -#: order/views.py:418 order/views.py:444 +#: order/views.py:421 order/views.py:447 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:421 order/views.py:447 +#: order/views.py:424 order/views.py:450 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:435 +#: order/views.py:438 msgid "Cancel sales order" msgstr "" -#: order/views.py:461 +#: order/views.py:464 msgid "Issue Order" msgstr "" -#: order/views.py:470 +#: order/views.py:473 msgid "Confirm order placement" msgstr "" -#: order/views.py:480 +#: order/views.py:483 msgid "Purchase order issued" msgstr "" -#: order/views.py:491 +#: order/views.py:494 msgid "Complete Order" msgstr "" -#: order/views.py:507 +#: order/views.py:510 msgid "Confirm order completion" msgstr "" -#: order/views.py:518 +#: order/views.py:521 msgid "Purchase order completed" msgstr "" -#: order/views.py:528 +#: order/views.py:531 msgid "Ship Order" msgstr "" -#: order/views.py:544 +#: order/views.py:547 msgid "Confirm order shipment" msgstr "" -#: order/views.py:550 +#: order/views.py:553 msgid "Could not ship order" msgstr "" -#: order/views.py:604 +#: order/views.py:607 msgid "Receive Parts" msgstr "" -#: order/views.py:674 +#: order/views.py:677 msgid "Items received" msgstr "" -#: order/views.py:688 +#: order/views.py:691 msgid "No destination set" msgstr "" -#: order/views.py:733 +#: order/views.py:736 msgid "Error converting quantity to number" msgstr "" -#: order/views.py:739 +#: order/views.py:742 msgid "Receive quantity less than zero" msgstr "" -#: order/views.py:745 +#: order/views.py:748 msgid "No lines specified" msgstr "" -#: order/views.py:1114 +#: order/views.py:1117 msgid "Supplier part must be specified" msgstr "" -#: order/views.py:1120 +#: order/views.py:1123 msgid "Supplier must match for Part and Order" msgstr "" -#: order/views.py:1239 order/views.py:1257 +#: order/views.py:1242 order/views.py:1260 msgid "Edit Line Item" msgstr "" -#: order/views.py:1273 order/views.py:1285 +#: order/views.py:1276 order/views.py:1288 msgid "Delete Line Item" msgstr "" -#: order/views.py:1278 order/views.py:1290 +#: order/views.py:1281 order/views.py:1293 msgid "Deleted line item" msgstr "" -#: order/views.py:1299 +#: order/views.py:1306 +msgid "Allocate Serial Numbers" +msgstr "" + +#: order/views.py:1351 +msgid "items" +msgstr "" + +#: order/views.py:1367 +msgid "Select line item" +msgstr "" + +#: order/views.py:1398 +msgid "No matching item for serial" +msgstr "" + +#: order/views.py:1408 +msgid "is not in stock" +msgstr "" + +#: order/views.py:1416 +msgid "already allocated to an order" +msgstr "" + +#: order/views.py:1470 msgid "Allocate Stock to Order" msgstr "" -#: order/views.py:1373 +#: order/views.py:1544 msgid "Edit Allocation Quantity" msgstr "" -#: order/views.py:1388 +#: order/views.py:1559 msgid "Remove allocation" msgstr "" -#: part/bom.py:138 part/models.py:760 part/templates/part/category.html:62 -#: part/templates/part/detail.html:90 +#: part/bom.py:138 part/models.py:72 part/models.py:761 +#: part/templates/part/category.html:62 part/templates/part/detail.html:90 msgid "Default Location" msgstr "" @@ -2861,7 +2978,7 @@ msgstr "" msgid "Include part supplier data in exported BOM" msgstr "" -#: part/forms.py:120 part/models.py:2053 +#: part/forms.py:120 part/models.py:2054 msgid "Parent Part" msgstr "" @@ -2933,323 +3050,352 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:72 +#: part/models.py:73 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:75 +#: part/models.py:76 +msgid "Default keywords" +msgstr "" + +#: part/models.py:76 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:81 part/models.py:2098 +#: part/models.py:82 part/models.py:2099 #: part/templates/part/part_app_base.html:9 msgid "Part Category" msgstr "" -#: part/models.py:82 part/templates/part/category.html:19 +#: 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 -#: users/models.py:32 +#: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:445 part/models.py:457 +#: part/models.py:446 part/models.py:458 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:554 +#: part/models.py:555 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:558 +#: part/models.py:559 msgid "Next available serial number is" msgstr "" -#: part/models.py:563 +#: part/models.py:564 msgid "Most recent serial number is" msgstr "" -#: part/models.py:642 +#: part/models.py:643 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:653 +#: part/models.py:654 msgid "Part must be unique for name, IPN and revision" msgstr "" -#: part/models.py:684 part/templates/part/detail.html:22 +#: part/models.py:685 part/templates/part/detail.html:22 msgid "Part name" msgstr "" -#: part/models.py:691 +#: part/models.py:692 msgid "Is Template" msgstr "" -#: part/models.py:692 +#: part/models.py:693 msgid "Is this part a template part?" msgstr "" -#: part/models.py:703 +#: part/models.py:704 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:704 part/templates/part/detail.html:60 +#: part/models.py:705 part/templates/part/detail.html:60 msgid "Variant Of" msgstr "" -#: part/models.py:710 +#: part/models.py:711 msgid "Part description" msgstr "" -#: part/models.py:715 part/templates/part/category.html:69 +#: part/models.py:716 part/templates/part/category.html:69 #: part/templates/part/detail.html:67 msgid "Keywords" msgstr "" -#: part/models.py:716 +#: part/models.py:717 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:723 part/templates/part/detail.html:73 +#: part/models.py:724 part/templates/part/detail.html:73 #: part/templates/part/set_category.html:15 templates/js/part.js:384 msgid "Category" msgstr "" -#: part/models.py:724 +#: part/models.py:725 msgid "Part category" msgstr "" -#: part/models.py:729 part/templates/part/detail.html:28 +#: part/models.py:730 part/templates/part/detail.html:28 #: part/templates/part/part_base.html:93 templates/js/part.js:160 msgid "IPN" msgstr "" -#: part/models.py:730 +#: part/models.py:731 msgid "Internal Part Number" msgstr "" -#: part/models.py:736 +#: part/models.py:737 msgid "Part revision or version number" msgstr "" -#: part/models.py:737 part/templates/part/detail.html:35 report/models.py:198 +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 #: templates/js/part.js:164 msgid "Revision" msgstr "" -#: part/models.py:758 +#: part/models.py:759 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:805 part/templates/part/detail.html:97 +#: part/models.py:806 part/templates/part/detail.html:97 msgid "Default Supplier" msgstr "" -#: part/models.py:806 +#: part/models.py:807 msgid "Default supplier part" msgstr "" -#: part/models.py:813 +#: part/models.py:814 msgid "Default Expiry" msgstr "" -#: part/models.py:814 +#: part/models.py:815 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:819 part/templates/part/detail.html:113 +#: part/models.py:820 part/templates/part/detail.html:113 msgid "Minimum Stock" msgstr "" -#: part/models.py:820 +#: part/models.py:821 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:826 part/templates/part/detail.html:106 +#: part/models.py:827 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "" -#: part/models.py:827 +#: part/models.py:828 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:833 +#: part/models.py:834 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:839 +#: part/models.py:840 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:845 +#: part/models.py:846 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:850 +#: part/models.py:851 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:855 +#: part/models.py:856 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:859 part/templates/part/detail.html:227 +#: part/models.py:860 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 #: templates/js/table_filters.js:214 templates/js/table_filters.js:283 msgid "Active" msgstr "" -#: part/models.py:860 +#: part/models.py:861 msgid "Is this part active?" msgstr "" -#: part/models.py:865 +#: part/models.py:866 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:870 +#: part/models.py:871 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:873 +#: part/models.py:874 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:874 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1926 +#: part/models.py:877 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:879 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:881 part/templates/part/detail.html:126 +#: templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: part/models.py:883 +msgid "Creation User" +msgstr "" + +#: part/models.py:1927 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:1943 +#: part/models.py:1944 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:1962 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1963 templates/js/part.js:561 templates/js/stock.js:104 msgid "Test Name" msgstr "" -#: part/models.py:1963 +#: part/models.py:1964 msgid "Enter a name for the test" msgstr "" -#: part/models.py:1968 +#: part/models.py:1969 msgid "Test Description" msgstr "" -#: part/models.py:1969 +#: part/models.py:1970 msgid "Enter description for this test" msgstr "" -#: part/models.py:1974 templates/js/part.js:570 +#: part/models.py:1975 templates/js/part.js:570 #: templates/js/table_filters.js:200 msgid "Required" msgstr "" -#: part/models.py:1975 +#: part/models.py:1976 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:1980 templates/js/part.js:578 +#: part/models.py:1981 templates/js/part.js:578 msgid "Requires Value" msgstr "" -#: part/models.py:1981 +#: part/models.py:1982 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:1986 templates/js/part.js:585 +#: part/models.py:1987 templates/js/part.js:585 msgid "Requires Attachment" msgstr "" -#: part/models.py:1987 +#: part/models.py:1988 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2020 +#: part/models.py:2021 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2025 +#: part/models.py:2026 msgid "Parameter Name" msgstr "" -#: part/models.py:2027 +#: part/models.py:2028 msgid "Parameter Units" msgstr "" -#: part/models.py:2055 part/models.py:2103 +#: part/models.py:2056 part/models.py:2104 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "" -#: part/models.py:2057 +#: part/models.py:2058 +msgid "Data" +msgstr "" + +#: part/models.py:2058 msgid "Parameter Value" msgstr "" -#: part/models.py:2107 +#: part/models.py:2108 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2135 +#: part/models.py:2136 msgid "Select parent part" msgstr "" -#: part/models.py:2143 +#: part/models.py:2144 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2149 +#: part/models.py:2150 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2151 +#: part/models.py:2152 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2154 +#: part/models.py:2155 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2157 +#: part/models.py:2158 msgid "BOM item reference" msgstr "" -#: part/models.py:2160 +#: part/models.py:2161 msgid "BOM item notes" msgstr "" -#: part/models.py:2162 +#: part/models.py:2163 msgid "BOM line checksum" msgstr "" -#: part/models.py:2166 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2167 templates/js/bom.js:275 templates/js/bom.js:282 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "" -#: part/models.py:2167 +#: part/models.py:2168 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2243 part/views.py:1592 part/views.py:1644 +#: part/models.py:2244 part/views.py:1592 part/views.py:1644 #: stock/models.py:259 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2252 part/models.py:2254 +#: part/models.py:2253 part/models.py:2255 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2257 +#: part/models.py:2258 msgid "BOM Item" msgstr "" -#: part/models.py:2378 +#: part/models.py:2379 msgid "Select Related Part" msgstr "" -#: part/models.py:2410 +#: part/models.py:2411 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3368,6 +3514,10 @@ msgstr "" msgid "File Fields" msgstr "" +#: part/templates/part/bom_upload/select_fields.html:47 +msgid "Remove column" +msgstr "" + #: part/templates/part/bom_upload/select_fields.html:58 msgid "Match Fields" msgstr "" @@ -3376,6 +3526,11 @@ msgstr "" msgid "Duplicate column selection" msgstr "" +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "" + #: part/templates/part/bom_upload/select_parts.html:16 msgid "Step 3 - Select Parts" msgstr "" @@ -3397,10 +3552,6 @@ msgstr "" msgid "Select Part" msgstr "" -#: part/templates/part/bom_upload/select_parts.html:58 -msgid "Remove row" -msgstr "" - #: part/templates/part/bom_upload/select_parts.html:65 #: part/templates/part/category.html:117 msgid "Create new part" @@ -3487,7 +3638,8 @@ msgstr "" msgid "Export Data" msgstr "" -#: part/templates/part/category.html:198 templates/js/stock.js:705 +#: part/templates/part/category.html:198 +#: stock/templates/stock/location.html:192 templates/js/stock.js:705 msgid "Create new location" msgstr "" @@ -3597,10 +3749,6 @@ msgstr "" msgid "Stock Expiry Time" msgstr "" -#: part/templates/part/detail.html:126 templates/js/order.js:293 -msgid "Creation Date" -msgstr "" - #: part/templates/part/detail.html:132 msgid "Created By" msgstr "" @@ -3736,10 +3884,18 @@ msgid "Edit" msgstr "" #: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 users/models.py:170 +#: part/templates/part/supplier.html:22 users/models.py:175 msgid "Delete" msgstr "" +#: part/templates/part/params.html:68 +msgid "New Template" +msgstr "" + +#: part/templates/part/params.html:69 +msgid "Create New Parameter Template" +msgstr "" + #: part/templates/part/part_app_base.html:11 msgid "Part List" msgstr "" @@ -3765,7 +3921,7 @@ msgstr "" #: part/templates/part/part_base.html:48 #: stock/templates/stock/item_base.html:129 -#: stock/templates/stock/location.html:46 +#: stock/templates/stock/location.html:46 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -3823,6 +3979,48 @@ msgstr "" msgid "Building" msgstr "" +#: part/templates/part/part_base.html:249 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +msgid "Pricing information for:" +msgstr "" + +#: part/templates/part/part_pricing.html:24 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:28 +#: part/templates/part/part_pricing.html:54 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:34 +#: part/templates/part/part_pricing.html:60 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:42 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:50 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:68 +msgid "Note: BOM pricing is incomplete for this part" +msgstr "" + +#: part/templates/part/part_pricing.html:75 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:85 +msgid "No pricing information is available for this part." +msgstr "" + #: part/templates/part/part_tests.html:17 msgid "Add Test Template" msgstr "" @@ -3851,10 +4049,6 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/set_category.html:32 -msgid "Remove part" -msgstr "" - #: part/templates/part/stock.html:10 msgid "Part Stock" msgstr "" @@ -4491,6 +4685,10 @@ msgstr "" msgid "StockItem cannot be moved as it is not in stock" msgstr "" +#: stock/models.py:1551 +msgid "Title" +msgstr "" + #: stock/models.py:1551 msgid "Tracking entry title" msgstr "" @@ -4523,10 +4721,6 @@ msgstr "" msgid "Test output value" msgstr "" -#: stock/models.py:1657 -msgid "Attachment" -msgstr "" - #: stock/models.py:1658 msgid "Test result attachment" msgstr "" @@ -4824,7 +5018,7 @@ msgid "Stock Details" msgstr "" #: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263 -#: templates/stats.html:52 users/models.py:34 +#: templates/stats.html:52 users/models.py:39 msgid "Stock Locations" msgstr "" @@ -4864,6 +5058,10 @@ msgstr "" msgid "Children" msgstr "" +#: stock/templates/stock/stock_adjust.html:43 +msgid "Remove item" +msgstr "" + #: stock/templates/stock/stock_app_base.html:15 msgid "Loading..." msgstr "" @@ -5364,10 +5562,6 @@ msgstr "" msgid "File" msgstr "" -#: templates/attachment_table.html:16 -msgid "Comment" -msgstr "" - #: templates/attachment_table.html:17 msgid "Uploaded" msgstr "" @@ -5553,19 +5747,11 @@ msgstr "" msgid "Quantity Per" msgstr "" -#: templates/js/build.js:578 templates/js/build.js:992 -msgid "Build stock" -msgstr "" - #: templates/js/build.js:582 templates/js/build.js:996 #: templates/stock_table.html:57 msgid "Order stock" msgstr "" -#: templates/js/build.js:585 -msgid "Allocate stock" -msgstr "" - #: templates/js/build.js:632 msgid "No builds matching query" msgstr "" @@ -5607,6 +5793,22 @@ msgstr "" msgid "Assembled part" msgstr "" +#: templates/js/filters.js:193 +msgid "Select filter" +msgstr "" + +#: templates/js/filters.js:268 +msgid "Add new filter" +msgstr "" + +#: templates/js/filters.js:271 +msgid "Clear all filters" +msgstr "" + +#: templates/js/filters.js:296 +msgid "Create filter" +msgstr "" + #: templates/js/label.js:10 templates/js/report.js:98 msgid "Select Stock Items" msgstr "" @@ -5647,6 +5849,10 @@ msgstr "" msgid "Select Label Template" msgstr "" +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + #: templates/js/modals.js:406 msgid "Show Error Information" msgstr "" @@ -5995,6 +6201,14 @@ msgstr "" msgid "No user information" msgstr "" +#: templates/js/stock.js:979 +msgid "Edit tracking entry" +msgstr "" + +#: templates/js/stock.js:980 +msgid "Delete tracking entry" +msgstr "" + #: templates/js/stock.js:1089 msgid "Create New Location" msgstr "" @@ -6241,7 +6455,7 @@ msgstr "" msgid "InvenTree server issues detected" msgstr "" -#: templates/navbar.html:69 users/models.py:31 +#: templates/navbar.html:69 users/models.py:36 msgid "Admin" msgstr "" @@ -6393,38 +6607,38 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:153 +#: users/models.py:158 msgid "Permission set" msgstr "" -#: users/models.py:161 +#: users/models.py:166 msgid "Group" msgstr "" -#: users/models.py:164 +#: users/models.py:169 msgid "View" msgstr "" -#: users/models.py:164 +#: users/models.py:169 msgid "Permission to view items" msgstr "" -#: users/models.py:166 +#: users/models.py:171 msgid "Add" msgstr "" -#: users/models.py:166 +#: users/models.py:171 msgid "Permission to add items" msgstr "" -#: users/models.py:168 +#: users/models.py:173 msgid "Change" msgstr "" -#: users/models.py:168 +#: users/models.py:173 msgid "Permissions to edit items" msgstr "" -#: users/models.py:170 +#: users/models.py:175 msgid "Permission to delete items" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index d229c67b45..7fe67bf929 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-03-28 16:04+0000\n" +"POT-Creation-Date: 2021-04-03 02:10+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" @@ -34,7 +34,7 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/forms.py:110 build/forms.py:97 build/forms.py:185 +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:187 msgid "Confirm" msgstr "" @@ -91,47 +91,84 @@ msgstr "" msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" +#: InvenTree/models.py:59 stock/models.py:1657 +msgid "Attachment" +msgstr "" + #: InvenTree/models.py:60 msgid "Select file to attach" msgstr "" +#: InvenTree/models.py:62 templates/attachment_table.html:16 +msgid "Comment" +msgstr "" + #: InvenTree/models.py:62 msgid "File comment" msgstr "" -#: InvenTree/models.py:68 +#: InvenTree/models.py:68 InvenTree/models.py:69 #: report/templates/report/inventree_test_report_base.html:91 #: templates/js/stock.js:960 msgid "User" msgstr "" -#: InvenTree/models.py:106 label/models.py:101 part/models.py:685 -#: part/templates/part/params.html:27 report/models.py:179 +#: InvenTree/models.py:72 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 +#: part/models.py:686 part/templates/part/params.html:27 report/models.py:179 +#: templates/InvenTree/search.html:136 templates/InvenTree/search.html:273 #: templates/js/part.js:109 msgid "Name" msgstr "" -#: InvenTree/models.py:112 +#: InvenTree/models.py:114 build/models.py:134 +#: build/templates/build/detail.html:21 company/models.py:359 +#: 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 +#: order/templates/order/purchase_order_detail.html:168 part/models.py:710 +#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 +#: report/models.py:192 +#: report/templates/report/inventree_build_order_base.html:118 +#: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 +#: templates/InvenTree/search.html:280 +#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 +#: 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 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:115 msgid "Description (optional)" msgstr "" -#: InvenTree/settings.py:445 +#: InvenTree/models.py:123 +msgid "parent" +msgstr "" + +#: InvenTree/settings.py:430 msgid "English" msgstr "" -#: InvenTree/settings.py:446 +#: InvenTree/settings.py:431 msgid "French" msgstr "" -#: InvenTree/settings.py:447 +#: InvenTree/settings.py:432 msgid "German" msgstr "" -#: InvenTree/settings.py:448 +#: InvenTree/settings.py:433 msgid "Polish" msgstr "" -#: InvenTree/settings.py:449 +#: InvenTree/settings.py:434 msgid "Turkish" msgstr "" @@ -306,25 +343,34 @@ msgstr "" msgid "Order target date" msgstr "" -#: build/forms.py:39 build/models.py:224 +#: build/forms.py:39 build/templates/build/build_base.html:104 +#: build/templates/build/detail.html:121 +#: order/templates/order/order_base.html:124 +#: order/templates/order/sales_order_base.html:117 +#: report/templates/report/inventree_build_order_base.html:126 +#: templates/js/build.js:723 templates/js/order.js:200 +#: templates/js/order.js:298 +msgid "Target Date" +msgstr "" + +#: build/forms.py:40 build/models.py:224 msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/forms.py:44 -msgid "Number of items to build" -msgstr "" - -#: build/forms.py:85 build/templates/build/auto_allocate.html:17 +#: build/forms.py:45 build/forms.py:87 +#: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:91 #: build/templates/build/detail.html:31 common/models.py:696 -#: company/forms.py:130 company/templates/company/supplier_part_pricing.html:77 -#: order/templates/order/order_wizard/select_parts.html:32 +#: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 +#: order/forms.py:237 order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:193 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 +#: part/templates/part/part_pricing.html:12 +#: part/templates/part/part_pricing.html:19 #: part/templates/part/sale_prices.html:85 #: report/templates/report/inventree_build_order_base.html:114 #: report/templates/report/inventree_po_report.html:91 @@ -339,55 +385,59 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/forms.py:86 +#: build/forms.py:46 +msgid "Number of items to build" +msgstr "" + +#: build/forms.py:88 msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:90 stock/forms.py:117 -msgid "Serial numbers" +#: build/forms.py:92 order/forms.py:231 stock/forms.py:117 +msgid "Serial Numbers" msgstr "" -#: build/forms.py:92 +#: build/forms.py:94 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/forms.py:98 +#: build/forms.py:100 msgid "Confirm creation of build output" msgstr "" -#: build/forms.py:118 +#: build/forms.py:120 msgid "Confirm deletion of build output" msgstr "" -#: build/forms.py:139 +#: build/forms.py:141 msgid "Confirm unallocation of stock" msgstr "" -#: build/forms.py:163 +#: build/forms.py:165 msgid "Confirm stock allocation" msgstr "" -#: build/forms.py:186 +#: build/forms.py:188 msgid "Mark build as complete" msgstr "" -#: build/forms.py:210 +#: build/forms.py:212 msgid "Location of completed parts" msgstr "" -#: build/forms.py:215 +#: build/forms.py:217 msgid "Confirm completion with incomplete stock allocation" msgstr "" -#: build/forms.py:218 +#: build/forms.py:220 msgid "Confirm build completion" msgstr "" -#: build/forms.py:238 build/views.py:66 +#: build/forms.py:240 build/views.py:66 msgid "Confirm build cancellation" msgstr "" -#: build/forms.py:252 +#: build/forms.py:254 msgid "Select quantity of stock to allocate" msgstr "" @@ -404,7 +454,7 @@ msgstr "" #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:181 #: templates/InvenTree/search.html:169 -#: templates/InvenTree/settings/tabs.html:31 users/models.py:36 +#: templates/InvenTree/settings/tabs.html:31 users/models.py:41 msgid "Build Orders" msgstr "" @@ -419,24 +469,6 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:134 build/templates/build/detail.html:21 -#: company/models.py:359 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 -#: order/templates/order/purchase_order_detail.html:168 part/models.py:709 -#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 -#: report/models.py:192 -#: report/templates/report/inventree_build_order_base.html:118 -#: templates/InvenTree/search.html:208 -#: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190 -#: 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 -msgid "Description" -msgstr "" - #: build/models.py:137 msgid "Brief description of the build" msgstr "" @@ -455,8 +487,9 @@ msgstr "" #: build/templates/build/detail.html:26 order/models.py:662 #: order/templates/order/order_wizard/select_parts.html:30 #: order/templates/order/purchase_order_detail.html:156 -#: order/templates/order/receive_parts.html:19 part/models.py:320 -#: part/templates/part/part_app_base.html:7 part/templates/part/related.html:29 +#: order/templates/order/receive_parts.html:19 part/models.py:321 +#: part/models.py:2054 part/templates/part/part_app_base.html:7 +#: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 #: report/templates/report/inventree_build_order_base.html:110 @@ -537,15 +570,35 @@ msgstr "" msgid "Target completion date" msgstr "" -#: build/models.py:240 +#: build/models.py:227 order/models.py:215 +msgid "Completion Date" +msgstr "" + +#: build/models.py:233 +msgid "completed by" +msgstr "" + +#: build/models.py:241 +msgid "Issued by" +msgstr "" + +#: build/models.py:242 msgid "User who issued this build order" msgstr "" -#: build/models.py:248 +#: build/models.py:250 build/templates/build/build_base.html:142 +#: build/templates/build/detail.html:105 order/models.py:118 +#: order/templates/order/order_base.html:138 +#: order/templates/order/sales_order_base.html:138 part/models.py:885 +#: report/templates/report/inventree_build_order_base.html:159 +msgid "Responsible" +msgstr "" + +#: build/models.py:251 msgid "User responsible for this build order" msgstr "" -#: build/models.py:253 build/templates/build/detail.html:91 +#: build/models.py:256 build/templates/build/detail.html:91 #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 @@ -553,90 +606,90 @@ msgstr "" msgid "External Link" msgstr "" -#: build/models.py:254 part/models.py:743 stock/models.py:425 +#: build/models.py:257 part/models.py:744 stock/models.py:425 msgid "Link to external URL" msgstr "" -#: build/models.py:258 build/templates/build/navbar.html:59 +#: build/models.py:261 build/templates/build/navbar.html:59 #: company/models.py:366 company/templates/company/navbar.html:59 #: company/templates/company/navbar.html:62 #: order/templates/order/po_navbar.html:29 #: order/templates/order/po_navbar.html:32 #: order/templates/order/purchase_order_detail.html:227 #: order/templates/order/so_navbar.html:33 -#: order/templates/order/so_navbar.html:36 part/models.py:869 +#: order/templates/order/so_navbar.html:36 part/models.py:870 #: part/templates/part/navbar.html:122 #: report/templates/report/inventree_build_order_base.html:173 #: stock/forms.py:316 stock/forms.py:348 stock/forms.py:376 stock/models.py:495 -#: stock/models.py:1663 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 +#: stock/models.py:1553 stock/models.py:1663 +#: 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 msgid "Notes" msgstr "" -#: build/models.py:259 +#: build/models.py:262 msgid "Extra build notes" msgstr "" -#: build/models.py:670 +#: build/models.py:673 msgid "No build output specified" msgstr "" -#: build/models.py:673 +#: build/models.py:676 msgid "Build output is already completed" msgstr "" -#: build/models.py:676 +#: build/models.py:679 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:751 +#: build/models.py:754 msgid "Completed build output" msgstr "" -#: build/models.py:993 +#: build/models.py:996 msgid "BuildItem must be unique for build, stock_item and install_into" msgstr "" -#: build/models.py:1015 +#: build/models.py:1018 msgid "Build item must specify a build output" msgstr "" -#: build/models.py:1020 +#: build/models.py:1023 #, python-brace-format msgid "Selected stock item not found in BOM for part '{p}'" msgstr "" -#: build/models.py:1024 +#: build/models.py:1027 #, python-brace-format msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/models.py:1031 order/models.py:746 +#: build/models.py:1034 order/models.py:751 msgid "StockItem is over-allocated" msgstr "" -#: build/models.py:1035 order/models.py:749 +#: build/models.py:1038 order/models.py:754 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1039 +#: build/models.py:1042 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1079 +#: build/models.py:1082 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1086 +#: build/models.py:1089 msgid "Source stock item" msgstr "" -#: build/models.py:1098 +#: build/models.py:1101 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1106 +#: build/models.py:1109 msgid "Destination stock item" msgstr "" @@ -661,7 +714,7 @@ msgid "Order required parts" msgstr "" #: build/templates/build/allocate.html:31 -#: company/templates/company/detail_part.html:31 order/views.py:791 +#: company/templates/company/detail_part.html:31 order/views.py:794 #: part/templates/part/category.html:127 msgid "Order Parts" msgstr "" @@ -768,10 +821,12 @@ msgid "Edit Build" msgstr "" #: build/templates/build/build_base.html:68 +#: build/templates/build/build_base.html:176 msgid "Complete Build" msgstr "" -#: build/templates/build/build_base.html:69 build/views.py:57 +#: build/templates/build/build_base.html:69 +#: build/templates/build/build_base.html:167 build/views.py:57 msgid "Cancel Build" msgstr "" @@ -790,16 +845,6 @@ msgstr "" msgid "Status" msgstr "" -#: build/templates/build/build_base.html:104 -#: build/templates/build/detail.html:121 -#: order/templates/order/order_base.html:124 -#: order/templates/order/sales_order_base.html:117 -#: report/templates/report/inventree_build_order_base.html:126 -#: templates/js/build.js:723 templates/js/order.js:200 -#: templates/js/order.js:298 -msgid "Target Date" -msgstr "" - #: build/templates/build/build_base.html:108 msgid "This build was due on" msgstr "" @@ -827,14 +872,6 @@ msgstr "" msgid "Issued By" msgstr "" -#: build/templates/build/build_base.html:142 -#: build/templates/build/detail.html:105 order/models.py:118 -#: order/templates/order/order_base.html:138 -#: order/templates/order/sales_order_base.html:138 -#: report/templates/report/inventree_build_order_base.html:159 -msgid "Responsible" -msgstr "" - #: build/templates/build/build_children.html:10 #: build/templates/build/navbar.html:42 msgid "Child Build Orders" @@ -1019,18 +1056,19 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/notes.html:23 company/templates/company/notes.html:21 -#: order/templates/order/order_notes.html:24 -#: order/templates/order/sales_order_notes.html:26 -#: part/templates/part/notes.html:25 stock/templates/stock/item_notes.html:23 -msgid "Save" +#: build/templates/build/notes.html:14 company/templates/company/notes.html:13 +#: order/templates/order/order_notes.html:15 +#: order/templates/order/sales_order_notes.html:16 +#: part/templates/part/notes.html:14 stock/templates/stock/item_notes.html:15 +msgid "Edit notes" msgstr "" -#: build/templates/build/notes.html:30 company/templates/company/notes.html:29 -#: order/templates/order/order_notes.html:31 -#: order/templates/order/sales_order_notes.html:32 -#: part/templates/part/notes.html:33 stock/templates/stock/item_notes.html:29 -msgid "Edit notes" +#: build/templates/build/notes.html:26 company/templates/company/notes.html:24 +#: order/templates/order/order_notes.html:27 +#: order/templates/order/sales_order_notes.html:29 +#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:454 +#: stock/templates/stock/item_notes.html:26 +msgid "Save" msgstr "" #: build/templates/build/unallocate.html:10 @@ -1170,24 +1208,24 @@ msgstr "" msgid "Add Build Order Attachment" msgstr "" -#: build/views.py:1062 order/views.py:107 order/views.py:159 part/views.py:172 +#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172 #: stock/views.py:277 msgid "Added attachment" msgstr "" -#: build/views.py:1098 order/views.py:186 order/views.py:207 +#: build/views.py:1098 order/views.py:189 order/views.py:210 msgid "Edit Attachment" msgstr "" -#: build/views.py:1108 order/views.py:190 order/views.py:211 +#: build/views.py:1108 order/views.py:193 order/views.py:214 msgid "Attachment updated" msgstr "" -#: build/views.py:1118 order/views.py:226 order/views.py:240 +#: build/views.py:1118 order/views.py:229 order/views.py:243 msgid "Delete Attachment" msgstr "" -#: build/views.py:1123 order/views.py:232 order/views.py:246 stock/views.py:333 +#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333 msgid "Deleted attachment" msgstr "" @@ -1303,7 +1341,7 @@ msgstr "" msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:150 part/templates/part/detail.html:160 +#: common/models.py:150 part/models.py:2056 part/templates/part/detail.html:160 #: report/models.py:185 stock/forms.py:258 templates/js/table_filters.js:24 #: templates/js/table_filters.js:288 msgid "Template" @@ -1313,7 +1351,7 @@ msgstr "" msgid "Parts are templates by default" msgstr "" -#: common/models.py:157 part/models.py:832 part/templates/part/detail.html:170 +#: common/models.py:157 part/models.py:833 part/templates/part/detail.html:170 #: templates/js/table_filters.js:101 templates/js/table_filters.js:300 msgid "Assembly" msgstr "" @@ -1322,7 +1360,7 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:164 part/models.py:838 part/templates/part/detail.html:180 +#: common/models.py:164 part/models.py:839 part/templates/part/detail.html:180 #: templates/js/table_filters.js:304 msgid "Component" msgstr "" @@ -1331,7 +1369,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:171 part/models.py:849 part/templates/part/detail.html:200 +#: common/models.py:171 part/models.py:850 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "" @@ -1339,7 +1377,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:178 part/models.py:854 part/templates/part/detail.html:210 +#: common/models.py:178 part/models.py:855 part/templates/part/detail.html:210 #: templates/js/table_filters.js:312 msgid "Salable" msgstr "" @@ -1348,7 +1386,7 @@ msgstr "" msgid "Parts are salable by default" msgstr "" -#: common/models.py:185 part/models.py:844 part/templates/part/detail.html:190 +#: common/models.py:185 part/models.py:845 part/templates/part/detail.html:190 #: templates/js/table_filters.js:32 templates/js/table_filters.js:316 msgid "Trackable" msgstr "" @@ -1357,7 +1395,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/models.py:192 part/models.py:864 part/templates/part/detail.html:150 +#: common/models.py:192 part/models.py:865 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "" @@ -1514,7 +1552,7 @@ msgstr "" msgid "Key string must be unique" msgstr "" -#: common/models.py:697 company/forms.py:131 +#: common/models.py:697 company/forms.py:132 msgid "Price break quantity" msgstr "" @@ -1547,23 +1585,28 @@ msgstr "" msgid "Supplied value must be a boolean" msgstr "" -#: company/forms.py:37 company/models.py:139 +#: company/forms.py:37 company/models.py:137 +#: company/templates/company/detail.html:40 +msgid "Currency" +msgstr "" + +#: company/forms.py:38 company/models.py:139 msgid "Default currency used for this company" msgstr "" -#: company/forms.py:75 part/forms.py:46 +#: company/forms.py:76 part/forms.py:46 msgid "URL" msgstr "" -#: company/forms.py:76 part/forms.py:47 +#: company/forms.py:77 part/forms.py:47 msgid "Image URL" msgstr "" -#: company/forms.py:98 +#: company/forms.py:99 msgid "Single Price" msgstr "" -#: company/forms.py:100 +#: company/forms.py:101 msgid "Single quantity price" msgstr "" @@ -1620,20 +1663,28 @@ msgstr "" msgid "Link to external company information" msgstr "" +#: company/models.py:129 +msgid "is customer" +msgstr "" + #: company/models.py:129 msgid "Do you sell items to this company?" msgstr "" +#: company/models.py:131 +msgid "is supplier" +msgstr "" + #: company/models.py:131 msgid "Do you purchase items from this company?" msgstr "" #: company/models.py:133 -msgid "Does this company manufacture parts?" +msgid "is manufacturer" msgstr "" -#: company/models.py:137 company/templates/company/detail.html:40 -msgid "Currency" +#: company/models.py:133 +msgid "Does this company manufacture parts?" msgstr "" #: company/models.py:313 stock/models.py:370 @@ -1641,7 +1692,7 @@ msgstr "" msgid "Base Part" msgstr "" -#: company/models.py:317 +#: company/models.py:317 order/views.py:1372 msgid "Select part" msgstr "" @@ -1691,9 +1742,9 @@ msgstr "" msgid "Manufacturer part number" msgstr "" -#: company/models.py:353 part/models.py:742 +#: company/models.py:353 part/models.py:743 #: report/templates/report/inventree_build_order_base.html:165 -#: templates/js/company.js:208 templates/js/part.js:430 +#: stock/models.py:1555 templates/js/company.js:208 templates/js/part.js:430 msgid "Link" msgstr "" @@ -1716,10 +1767,20 @@ msgstr "" msgid "Minimum charge (e.g. stocking fee)" msgstr "" +#: company/models.py:371 company/templates/company/supplier_part_base.html:106 +#: stock/models.py:394 stock/templates/stock/item_base.html:295 +#: templates/js/stock.js:663 +msgid "Packaging" +msgstr "" + #: company/models.py:371 msgid "Part packaging" msgstr "" +#: company/models.py:373 +msgid "multiple" +msgstr "" + #: company/templates/company/assigned_stock.html:10 #: company/templates/company/navbar.html:51 #: company/templates/company/navbar.html:54 templates/js/build.js:411 @@ -1742,6 +1803,18 @@ msgstr "" msgid "Download image from URL" msgstr "" +#: company/templates/company/company_base.html:46 order/views.py:306 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:51 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:56 company/views.py:324 +msgid "Delete Company" +msgstr "" + #: company/templates/company/company_base.html:64 #: company/templates/company/detail.html:10 #: company/templates/company/navbar.html:12 @@ -1842,7 +1915,7 @@ msgstr "" #: company/templates/company/detail_stock.html:37 #: company/templates/company/supplier_part_stock.html:34 #: part/templates/part/category.html:114 part/templates/part/category.html:128 -#: part/templates/part/stock.html:54 +#: part/templates/part/stock.html:54 stock/templates/stock/location.html:163 msgid "Export" msgstr "" @@ -1855,21 +1928,21 @@ msgid "Supplied Parts" msgstr "" #: company/templates/company/navbar.html:23 -#: order/templates/order/receive_parts.html:14 part/models.py:321 +#: order/templates/order/receive_parts.html:14 part/models.py:322 #: part/templates/part/cat_link.html:7 part/templates/part/category.html:95 #: part/templates/part/category_navbar.html:11 #: part/templates/part/category_navbar.html:14 #: 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:33 +#: templates/stats.html:35 templates/stats.html:44 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:35 +#: templates/stats.html:48 templates/stats.html:57 users/models.py:40 msgid "Stock Items" msgstr "" @@ -1895,7 +1968,7 @@ msgstr "" #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:226 #: templates/InvenTree/search.html:330 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46 -#: users/models.py:38 +#: users/models.py:43 msgid "Sales Orders" msgstr "" @@ -1907,7 +1980,7 @@ msgstr "" #: part/templates/part/orders.html:10 templates/InvenTree/index.html:203 #: templates/InvenTree/search.html:300 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37 -#: users/models.py:37 +#: users/models.py:42 msgid "Purchase Orders" msgstr "" @@ -1968,6 +2041,7 @@ msgid "Supplier Part" msgstr "" #: company/templates/company/supplier_part_base.html:35 +#: company/templates/company/supplier_part_orders.html:17 #: part/templates/part/orders.html:17 part/templates/part/part_base.html:64 msgid "Order part" msgstr "" @@ -1990,11 +2064,6 @@ msgstr "" msgid "Internal Part" msgstr "" -#: company/templates/company/supplier_part_base.html:106 stock/models.py:394 -#: stock/templates/stock/item_base.html:295 templates/js/stock.js:663 -msgid "Packaging" -msgstr "" - #: company/templates/company/supplier_part_orders.html:18 #: part/templates/part/orders.html:18 msgid "Order Part" @@ -2092,10 +2161,6 @@ msgstr "" msgid "Created new company" msgstr "" -#: company/views.py:324 -msgid "Delete Company" -msgstr "" - #: company/views.py:330 msgid "Company was deleted" msgstr "" @@ -2173,44 +2238,52 @@ msgstr "" msgid "Filters" msgstr "" -#: order/forms.py:25 order/templates/order/order_base.html:47 +#: order/forms.py:27 order/templates/order/order_base.html:47 msgid "Place order" msgstr "" -#: order/forms.py:36 order/templates/order/order_base.html:54 +#: order/forms.py:38 order/templates/order/order_base.html:54 msgid "Mark order as complete" msgstr "" -#: order/forms.py:47 order/forms.py:58 order/templates/order/order_base.html:59 +#: order/forms.py:49 order/forms.py:60 order/templates/order/order_base.html:59 #: order/templates/order/sales_order_base.html:59 msgid "Cancel order" msgstr "" -#: order/forms.py:69 order/templates/order/sales_order_base.html:56 +#: order/forms.py:71 order/templates/order/sales_order_base.html:56 msgid "Ship order" msgstr "" -#: order/forms.py:80 +#: order/forms.py:82 msgid "Receive parts to this location" msgstr "" -#: order/forms.py:101 +#: order/forms.py:103 msgid "Purchase Order reference" msgstr "" -#: order/forms.py:107 +#: order/forms.py:109 msgid "Target date for order delivery. Order will be overdue after this date." msgstr "" -#: order/forms.py:135 +#: order/forms.py:137 msgid "Enter sales order number" msgstr "" -#: order/forms.py:141 order/models.py:448 +#: order/forms.py:143 order/models.py:448 msgid "" "Target date for order completion. Order will be overdue after this date." msgstr "" +#: order/forms.py:233 +msgid "Enter stock item serial numbers" +msgstr "" + +#: order/forms.py:239 +msgid "Enter quantity of stock items" +msgstr "" + #: order/models.py:99 msgid "Order reference" msgstr "" @@ -2260,10 +2333,6 @@ msgid "" "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:215 -msgid "Completion Date" -msgstr "" - #: order/models.py:216 msgid "Date order was completed" msgstr "" @@ -2333,27 +2402,31 @@ msgstr "" msgid "Unit purchase price" msgstr "" -#: order/models.py:737 -msgid "Cannot allocate stock item to a line with a different part" -msgstr "" - -#: order/models.py:739 -msgid "Cannot allocate stock to a line without a part" +#: order/models.py:736 order/models.py:738 +msgid "Stock item has not been assigned" msgstr "" #: order/models.py:742 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:744 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:747 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:752 +#: order/models.py:757 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:768 +#: order/models.py:773 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:771 +#: order/models.py:776 msgid "Enter stock allocation quantity" msgstr "" @@ -2369,6 +2442,7 @@ msgid "Print" msgstr "" #: order/templates/order/order_base.html:43 +#: order/templates/order/sales_order_base.html:52 msgid "Edit order information" msgstr "" @@ -2440,6 +2514,11 @@ msgstr "" msgid "Select a supplier for" msgstr "" +#: order/templates/order/order_wizard/select_parts.html:69 +#: part/templates/part/set_category.html:32 +msgid "Remove part" +msgstr "" + #: order/templates/order/order_wizard/select_pos.html:8 msgid "Step 2 of 2 - Select Purchase Orders" msgstr "" @@ -2457,6 +2536,10 @@ msgstr "" msgid "Select Purchase Order" msgstr "" +#: order/templates/order/order_wizard/select_pos.html:45 +msgid "Create new purchase order for {{ supplier.name }}" +msgstr "" + #: order/templates/order/order_wizard/select_pos.html:68 msgid "Select a purchase order for" msgstr "" @@ -2480,15 +2563,16 @@ msgid "Purchase Order Items" msgstr "" #: order/templates/order/purchase_order_detail.html:24 -#: order/templates/order/sales_order_detail.html:22 order/views.py:1105 -#: order/views.py:1188 +#: order/templates/order/sales_order_detail.html:22 order/views.py:1108 +#: order/views.py:1191 msgid "Add Line Item" 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 -#: templates/js/stock.js:704 templates/js/stock.js:1088 +#: stock/templates/stock/location.html:191 templates/js/stock.js:704 +#: templates/js/stock.js:1088 msgid "New Location" msgstr "" @@ -2507,7 +2591,7 @@ msgid "Unit Price" msgstr "" #: order/templates/order/purchase_order_detail.html:239 -#: order/templates/order/sales_order_detail.html:289 +#: order/templates/order/sales_order_detail.html:294 msgid "Edit line item" msgstr "" @@ -2549,6 +2633,10 @@ msgstr "" msgid "Error: Referenced part has been removed" msgstr "" +#: order/templates/order/receive_parts.html:57 +msgid "Remove line" +msgstr "" + #: order/templates/order/sales_order_base.html:15 msgid "This SalesOrder has not been fully allocated" msgstr "" @@ -2595,8 +2683,8 @@ msgstr "" msgid "Delete stock allocation" msgstr "" -#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 -#: templates/js/build.js:785 +#: order/templates/order/sales_order_detail.html:229 order/views.py:1351 +#: templates/js/build.js:523 templates/js/build.js:785 msgid "Allocated" msgstr "" @@ -2605,18 +2693,23 @@ msgid "Fulfilled" msgstr "" #: order/templates/order/sales_order_detail.html:279 -msgid "Buy parts" +msgid "Allocate serial numbers" msgstr "" -#: order/templates/order/sales_order_detail.html:283 -msgid "Build parts" +#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 +msgid "Allocate stock" msgstr "" -#: order/templates/order/sales_order_detail.html:286 -msgid "Allocate parts" +#: order/templates/order/sales_order_detail.html:285 +msgid "Purchase stock" msgstr "" -#: order/templates/order/sales_order_detail.html:290 +#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 +#: templates/js/build.js:992 +msgid "Build stock" +msgstr "" + +#: order/templates/order/sales_order_detail.html:295 msgid "Delete line item " msgstr "" @@ -2646,6 +2739,10 @@ msgstr "" msgid "Shipping this order means that the order will no longer be editable." msgstr "" +#: order/templates/order/so_allocate_by_serial.html:9 +msgid "Allocate stock items by serial number" +msgstr "" + #: order/templates/order/so_allocation_delete.html:7 msgid "This action will unallocate the following stock from the Sales Order" msgstr "" @@ -2659,140 +2756,160 @@ msgstr "" msgid "Are you sure you wish to delete this line item?" msgstr "" -#: order/views.py:96 +#: order/views.py:99 msgid "Add Purchase Order Attachment" msgstr "" -#: order/views.py:146 +#: order/views.py:149 msgid "Add Sales Order Attachment" msgstr "" -#: order/views.py:303 -msgid "Create Purchase Order" -msgstr "" - -#: order/views.py:338 +#: order/views.py:341 msgid "Create Sales Order" msgstr "" -#: order/views.py:373 +#: order/views.py:376 msgid "Edit Purchase Order" msgstr "" -#: order/views.py:393 +#: order/views.py:396 msgid "Edit Sales Order" msgstr "" -#: order/views.py:409 +#: order/views.py:412 msgid "Cancel Order" msgstr "" -#: order/views.py:418 order/views.py:444 +#: order/views.py:421 order/views.py:447 msgid "Confirm order cancellation" msgstr "" -#: order/views.py:421 order/views.py:447 +#: order/views.py:424 order/views.py:450 msgid "Order cannot be cancelled" msgstr "" -#: order/views.py:435 +#: order/views.py:438 msgid "Cancel sales order" msgstr "" -#: order/views.py:461 +#: order/views.py:464 msgid "Issue Order" msgstr "" -#: order/views.py:470 +#: order/views.py:473 msgid "Confirm order placement" msgstr "" -#: order/views.py:480 +#: order/views.py:483 msgid "Purchase order issued" msgstr "" -#: order/views.py:491 +#: order/views.py:494 msgid "Complete Order" msgstr "" -#: order/views.py:507 +#: order/views.py:510 msgid "Confirm order completion" msgstr "" -#: order/views.py:518 +#: order/views.py:521 msgid "Purchase order completed" msgstr "" -#: order/views.py:528 +#: order/views.py:531 msgid "Ship Order" msgstr "" -#: order/views.py:544 +#: order/views.py:547 msgid "Confirm order shipment" msgstr "" -#: order/views.py:550 +#: order/views.py:553 msgid "Could not ship order" msgstr "" -#: order/views.py:604 +#: order/views.py:607 msgid "Receive Parts" msgstr "" -#: order/views.py:674 +#: order/views.py:677 msgid "Items received" msgstr "" -#: order/views.py:688 +#: order/views.py:691 msgid "No destination set" msgstr "" -#: order/views.py:733 +#: order/views.py:736 msgid "Error converting quantity to number" msgstr "" -#: order/views.py:739 +#: order/views.py:742 msgid "Receive quantity less than zero" msgstr "" -#: order/views.py:745 +#: order/views.py:748 msgid "No lines specified" msgstr "" -#: order/views.py:1114 +#: order/views.py:1117 msgid "Supplier part must be specified" msgstr "" -#: order/views.py:1120 +#: order/views.py:1123 msgid "Supplier must match for Part and Order" msgstr "" -#: order/views.py:1239 order/views.py:1257 +#: order/views.py:1242 order/views.py:1260 msgid "Edit Line Item" msgstr "" -#: order/views.py:1273 order/views.py:1285 +#: order/views.py:1276 order/views.py:1288 msgid "Delete Line Item" msgstr "" -#: order/views.py:1278 order/views.py:1290 +#: order/views.py:1281 order/views.py:1293 msgid "Deleted line item" msgstr "" -#: order/views.py:1299 +#: order/views.py:1306 +msgid "Allocate Serial Numbers" +msgstr "" + +#: order/views.py:1351 +msgid "items" +msgstr "" + +#: order/views.py:1367 +msgid "Select line item" +msgstr "" + +#: order/views.py:1398 +msgid "No matching item for serial" +msgstr "" + +#: order/views.py:1408 +msgid "is not in stock" +msgstr "" + +#: order/views.py:1416 +msgid "already allocated to an order" +msgstr "" + +#: order/views.py:1470 msgid "Allocate Stock to Order" msgstr "" -#: order/views.py:1373 +#: order/views.py:1544 msgid "Edit Allocation Quantity" msgstr "" -#: order/views.py:1388 +#: order/views.py:1559 msgid "Remove allocation" msgstr "" -#: part/bom.py:138 part/models.py:760 part/templates/part/category.html:62 -#: part/templates/part/detail.html:90 +#: part/bom.py:138 part/models.py:72 part/models.py:761 +#: part/templates/part/category.html:62 part/templates/part/detail.html:90 msgid "Default Location" msgstr "" @@ -2861,7 +2978,7 @@ msgstr "" msgid "Include part supplier data in exported BOM" msgstr "" -#: part/forms.py:120 part/models.py:2053 +#: part/forms.py:120 part/models.py:2054 msgid "Parent Part" msgstr "" @@ -2933,323 +3050,352 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:72 +#: part/models.py:73 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:75 +#: part/models.py:76 +msgid "Default keywords" +msgstr "" + +#: part/models.py:76 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:81 part/models.py:2098 +#: part/models.py:82 part/models.py:2099 #: part/templates/part/part_app_base.html:9 msgid "Part Category" msgstr "" -#: part/models.py:82 part/templates/part/category.html:19 +#: 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 -#: users/models.py:32 +#: users/models.py:37 msgid "Part Categories" msgstr "" -#: part/models.py:445 part/models.py:457 +#: part/models.py:446 part/models.py:458 #, python-brace-format msgid "Part '{p1}' is used in BOM for '{p2}' (recursive)" msgstr "" -#: part/models.py:554 +#: part/models.py:555 msgid "Next available serial numbers are" msgstr "" -#: part/models.py:558 +#: part/models.py:559 msgid "Next available serial number is" msgstr "" -#: part/models.py:563 +#: part/models.py:564 msgid "Most recent serial number is" msgstr "" -#: part/models.py:642 +#: part/models.py:643 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:653 +#: part/models.py:654 msgid "Part must be unique for name, IPN and revision" msgstr "" -#: part/models.py:684 part/templates/part/detail.html:22 +#: part/models.py:685 part/templates/part/detail.html:22 msgid "Part name" msgstr "" -#: part/models.py:691 +#: part/models.py:692 msgid "Is Template" msgstr "" -#: part/models.py:692 +#: part/models.py:693 msgid "Is this part a template part?" msgstr "" -#: part/models.py:703 +#: part/models.py:704 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:704 part/templates/part/detail.html:60 +#: part/models.py:705 part/templates/part/detail.html:60 msgid "Variant Of" msgstr "" -#: part/models.py:710 +#: part/models.py:711 msgid "Part description" msgstr "" -#: part/models.py:715 part/templates/part/category.html:69 +#: part/models.py:716 part/templates/part/category.html:69 #: part/templates/part/detail.html:67 msgid "Keywords" msgstr "" -#: part/models.py:716 +#: part/models.py:717 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:723 part/templates/part/detail.html:73 +#: part/models.py:724 part/templates/part/detail.html:73 #: part/templates/part/set_category.html:15 templates/js/part.js:384 msgid "Category" msgstr "" -#: part/models.py:724 +#: part/models.py:725 msgid "Part category" msgstr "" -#: part/models.py:729 part/templates/part/detail.html:28 +#: part/models.py:730 part/templates/part/detail.html:28 #: part/templates/part/part_base.html:93 templates/js/part.js:160 msgid "IPN" msgstr "" -#: part/models.py:730 +#: part/models.py:731 msgid "Internal Part Number" msgstr "" -#: part/models.py:736 +#: part/models.py:737 msgid "Part revision or version number" msgstr "" -#: part/models.py:737 part/templates/part/detail.html:35 report/models.py:198 +#: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198 #: templates/js/part.js:164 msgid "Revision" msgstr "" -#: part/models.py:758 +#: part/models.py:759 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:805 part/templates/part/detail.html:97 +#: part/models.py:806 part/templates/part/detail.html:97 msgid "Default Supplier" msgstr "" -#: part/models.py:806 +#: part/models.py:807 msgid "Default supplier part" msgstr "" -#: part/models.py:813 +#: part/models.py:814 msgid "Default Expiry" msgstr "" -#: part/models.py:814 +#: part/models.py:815 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:819 part/templates/part/detail.html:113 +#: part/models.py:820 part/templates/part/detail.html:113 msgid "Minimum Stock" msgstr "" -#: part/models.py:820 +#: part/models.py:821 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:826 part/templates/part/detail.html:106 +#: part/models.py:827 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "" -#: part/models.py:827 +#: part/models.py:828 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:833 +#: part/models.py:834 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:839 +#: part/models.py:840 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:845 +#: part/models.py:846 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:850 +#: part/models.py:851 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:855 +#: part/models.py:856 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:859 part/templates/part/detail.html:227 +#: part/models.py:860 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 #: templates/js/table_filters.js:214 templates/js/table_filters.js:283 msgid "Active" msgstr "" -#: part/models.py:860 +#: part/models.py:861 msgid "Is this part active?" msgstr "" -#: part/models.py:865 +#: part/models.py:866 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:870 +#: part/models.py:871 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:873 +#: part/models.py:874 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:874 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1926 +#: part/models.py:877 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:879 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:881 part/templates/part/detail.html:126 +#: templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: part/models.py:883 +msgid "Creation User" +msgstr "" + +#: part/models.py:1927 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:1943 +#: part/models.py:1944 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:1962 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1963 templates/js/part.js:561 templates/js/stock.js:104 msgid "Test Name" msgstr "" -#: part/models.py:1963 +#: part/models.py:1964 msgid "Enter a name for the test" msgstr "" -#: part/models.py:1968 +#: part/models.py:1969 msgid "Test Description" msgstr "" -#: part/models.py:1969 +#: part/models.py:1970 msgid "Enter description for this test" msgstr "" -#: part/models.py:1974 templates/js/part.js:570 +#: part/models.py:1975 templates/js/part.js:570 #: templates/js/table_filters.js:200 msgid "Required" msgstr "" -#: part/models.py:1975 +#: part/models.py:1976 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:1980 templates/js/part.js:578 +#: part/models.py:1981 templates/js/part.js:578 msgid "Requires Value" msgstr "" -#: part/models.py:1981 +#: part/models.py:1982 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:1986 templates/js/part.js:585 +#: part/models.py:1987 templates/js/part.js:585 msgid "Requires Attachment" msgstr "" -#: part/models.py:1987 +#: part/models.py:1988 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2020 +#: part/models.py:2021 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2025 +#: part/models.py:2026 msgid "Parameter Name" msgstr "" -#: part/models.py:2027 +#: part/models.py:2028 msgid "Parameter Units" msgstr "" -#: part/models.py:2055 part/models.py:2103 +#: part/models.py:2056 part/models.py:2104 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "" -#: part/models.py:2057 +#: part/models.py:2058 +msgid "Data" +msgstr "" + +#: part/models.py:2058 msgid "Parameter Value" msgstr "" -#: part/models.py:2107 +#: part/models.py:2108 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2135 +#: part/models.py:2136 msgid "Select parent part" msgstr "" -#: part/models.py:2143 +#: part/models.py:2144 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2149 +#: part/models.py:2150 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2151 +#: part/models.py:2152 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2154 +#: part/models.py:2155 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2157 +#: part/models.py:2158 msgid "BOM item reference" msgstr "" -#: part/models.py:2160 +#: part/models.py:2161 msgid "BOM item notes" msgstr "" -#: part/models.py:2162 +#: part/models.py:2163 msgid "BOM line checksum" msgstr "" -#: part/models.py:2166 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2167 templates/js/bom.js:275 templates/js/bom.js:282 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "" -#: part/models.py:2167 +#: part/models.py:2168 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2243 part/views.py:1592 part/views.py:1644 +#: part/models.py:2244 part/views.py:1592 part/views.py:1644 #: stock/models.py:259 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2252 part/models.py:2254 +#: part/models.py:2253 part/models.py:2255 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2257 +#: part/models.py:2258 msgid "BOM Item" msgstr "" -#: part/models.py:2378 +#: part/models.py:2379 msgid "Select Related Part" msgstr "" -#: part/models.py:2410 +#: part/models.py:2411 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3368,6 +3514,10 @@ msgstr "" msgid "File Fields" msgstr "" +#: part/templates/part/bom_upload/select_fields.html:47 +msgid "Remove column" +msgstr "" + #: part/templates/part/bom_upload/select_fields.html:58 msgid "Match Fields" msgstr "" @@ -3376,6 +3526,11 @@ msgstr "" msgid "Duplicate column selection" msgstr "" +#: part/templates/part/bom_upload/select_fields.html:76 +#: part/templates/part/bom_upload/select_parts.html:58 +msgid "Remove row" +msgstr "" + #: part/templates/part/bom_upload/select_parts.html:16 msgid "Step 3 - Select Parts" msgstr "" @@ -3397,10 +3552,6 @@ msgstr "" msgid "Select Part" msgstr "" -#: part/templates/part/bom_upload/select_parts.html:58 -msgid "Remove row" -msgstr "" - #: part/templates/part/bom_upload/select_parts.html:65 #: part/templates/part/category.html:117 msgid "Create new part" @@ -3487,7 +3638,8 @@ msgstr "" msgid "Export Data" msgstr "" -#: part/templates/part/category.html:198 templates/js/stock.js:705 +#: part/templates/part/category.html:198 +#: stock/templates/stock/location.html:192 templates/js/stock.js:705 msgid "Create new location" msgstr "" @@ -3597,10 +3749,6 @@ msgstr "" msgid "Stock Expiry Time" msgstr "" -#: part/templates/part/detail.html:126 templates/js/order.js:293 -msgid "Creation Date" -msgstr "" - #: part/templates/part/detail.html:132 msgid "Created By" msgstr "" @@ -3736,10 +3884,18 @@ msgid "Edit" msgstr "" #: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 users/models.py:170 +#: part/templates/part/supplier.html:22 users/models.py:175 msgid "Delete" msgstr "" +#: part/templates/part/params.html:68 +msgid "New Template" +msgstr "" + +#: part/templates/part/params.html:69 +msgid "Create New Parameter Template" +msgstr "" + #: part/templates/part/part_app_base.html:11 msgid "Part List" msgstr "" @@ -3765,7 +3921,7 @@ msgstr "" #: part/templates/part/part_base.html:48 #: stock/templates/stock/item_base.html:129 -#: stock/templates/stock/location.html:46 +#: stock/templates/stock/location.html:46 templates/qr_button.html:1 msgid "Show QR Code" msgstr "" @@ -3823,6 +3979,48 @@ msgstr "" msgid "Building" msgstr "" +#: part/templates/part/part_base.html:249 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_pricing.html:8 +msgid "Pricing information for:" +msgstr "" + +#: part/templates/part/part_pricing.html:24 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:28 +#: part/templates/part/part_pricing.html:54 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:34 +#: part/templates/part/part_pricing.html:60 +msgid "Total Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:42 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:50 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:68 +msgid "Note: BOM pricing is incomplete for this part" +msgstr "" + +#: part/templates/part/part_pricing.html:75 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:85 +msgid "No pricing information is available for this part." +msgstr "" + #: part/templates/part/part_tests.html:17 msgid "Add Test Template" msgstr "" @@ -3851,10 +4049,6 @@ msgstr "" msgid "Set category for the following parts" msgstr "" -#: part/templates/part/set_category.html:32 -msgid "Remove part" -msgstr "" - #: part/templates/part/stock.html:10 msgid "Part Stock" msgstr "" @@ -4491,6 +4685,10 @@ msgstr "" msgid "StockItem cannot be moved as it is not in stock" msgstr "" +#: stock/models.py:1551 +msgid "Title" +msgstr "" + #: stock/models.py:1551 msgid "Tracking entry title" msgstr "" @@ -4523,10 +4721,6 @@ msgstr "" msgid "Test output value" msgstr "" -#: stock/models.py:1657 -msgid "Attachment" -msgstr "" - #: stock/models.py:1658 msgid "Test result attachment" msgstr "" @@ -4824,7 +5018,7 @@ msgid "Stock Details" msgstr "" #: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263 -#: templates/stats.html:52 users/models.py:34 +#: templates/stats.html:52 users/models.py:39 msgid "Stock Locations" msgstr "" @@ -4864,6 +5058,10 @@ msgstr "" msgid "Children" msgstr "" +#: stock/templates/stock/stock_adjust.html:43 +msgid "Remove item" +msgstr "" + #: stock/templates/stock/stock_app_base.html:15 msgid "Loading..." msgstr "" @@ -5364,10 +5562,6 @@ msgstr "" msgid "File" msgstr "" -#: templates/attachment_table.html:16 -msgid "Comment" -msgstr "" - #: templates/attachment_table.html:17 msgid "Uploaded" msgstr "" @@ -5553,19 +5747,11 @@ msgstr "" msgid "Quantity Per" msgstr "" -#: templates/js/build.js:578 templates/js/build.js:992 -msgid "Build stock" -msgstr "" - #: templates/js/build.js:582 templates/js/build.js:996 #: templates/stock_table.html:57 msgid "Order stock" msgstr "" -#: templates/js/build.js:585 -msgid "Allocate stock" -msgstr "" - #: templates/js/build.js:632 msgid "No builds matching query" msgstr "" @@ -5607,6 +5793,22 @@ msgstr "" msgid "Assembled part" msgstr "" +#: templates/js/filters.js:193 +msgid "Select filter" +msgstr "" + +#: templates/js/filters.js:268 +msgid "Add new filter" +msgstr "" + +#: templates/js/filters.js:271 +msgid "Clear all filters" +msgstr "" + +#: templates/js/filters.js:296 +msgid "Create filter" +msgstr "" + #: templates/js/label.js:10 templates/js/report.js:98 msgid "Select Stock Items" msgstr "" @@ -5647,6 +5849,10 @@ msgstr "" msgid "Select Label Template" msgstr "" +#: templates/js/modals.js:256 +msgid "Waiting for server..." +msgstr "" + #: templates/js/modals.js:406 msgid "Show Error Information" msgstr "" @@ -5995,6 +6201,14 @@ msgstr "" msgid "No user information" msgstr "" +#: templates/js/stock.js:979 +msgid "Edit tracking entry" +msgstr "" + +#: templates/js/stock.js:980 +msgid "Delete tracking entry" +msgstr "" + #: templates/js/stock.js:1089 msgid "Create New Location" msgstr "" @@ -6241,7 +6455,7 @@ msgstr "" msgid "InvenTree server issues detected" msgstr "" -#: templates/navbar.html:69 users/models.py:31 +#: templates/navbar.html:69 users/models.py:36 msgid "Admin" msgstr "" @@ -6393,38 +6607,38 @@ msgstr "" msgid "Important dates" msgstr "" -#: users/models.py:153 +#: users/models.py:158 msgid "Permission set" msgstr "" -#: users/models.py:161 +#: users/models.py:166 msgid "Group" msgstr "" -#: users/models.py:164 +#: users/models.py:169 msgid "View" msgstr "" -#: users/models.py:164 +#: users/models.py:169 msgid "Permission to view items" msgstr "" -#: users/models.py:166 +#: users/models.py:171 msgid "Add" msgstr "" -#: users/models.py:166 +#: users/models.py:171 msgid "Permission to add items" msgstr "" -#: users/models.py:168 +#: users/models.py:173 msgid "Change" msgstr "" -#: users/models.py:168 +#: users/models.py:173 msgid "Permissions to edit items" msgstr "" -#: users/models.py:170 +#: users/models.py:175 msgid "Permission to delete items" msgstr "" From cd7724d49020c345babb91fe9496a04d3b4fcd1f Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sat, 3 Apr 2021 13:48:02 +0200 Subject: [PATCH 07/16] added german(de) translations for the new stuff --- InvenTree/locale/de/LC_MESSAGES/django.po | 323 +++++++++++----------- 1 file changed, 159 insertions(+), 164 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index 75d6d455e2..ced6299586 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -115,10 +115,8 @@ msgid "User" msgstr "Benutzer" #: InvenTree/models.py:72 -#, fuzzy -#| msgid "Upload Part Image" msgid "upload date" -msgstr "Teilbild hochladen" +msgstr "Hochladedatum" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 #: part/models.py:686 part/templates/part/params.html:27 report/models.py:179 @@ -153,7 +151,7 @@ msgstr "Beschreibung (optional)" #: InvenTree/models.py:123 msgid "parent" -msgstr "" +msgstr "Eltern" #: InvenTree/settings.py:430 msgid "English" @@ -296,7 +294,7 @@ msgstr "Passwörter stimmen nicht überein" #: InvenTree/views.py:887 templates/navbar.html:83 msgid "System Information" -msgstr "Systeminformation" +msgstr "Systeminformationen" #: barcodes/api.py:53 barcodes/api.py:150 msgid "Must provide barcode_data parameter" @@ -397,8 +395,6 @@ msgid "Enter quantity for build output" msgstr "Menge für den Bau-Ausgabe angeben" #: build/forms.py:92 order/forms.py:231 stock/forms.py:117 -#, fuzzy -#| msgid "Serial Number" msgid "Serial Numbers" msgstr "Seriennummer" @@ -481,7 +477,7 @@ msgstr "Kurze Beschreibung des Baus" #: build/models.py:146 build/templates/build/build_base.html:121 #: build/templates/build/detail.html:77 msgid "Parent Build" -msgstr "Eltern-Bau" +msgstr "Eltern-Bauauftrag" #: build/models.py:147 msgid "BuildOrder to which this build is allocated" @@ -582,14 +578,10 @@ msgid "Completion Date" msgstr "Fertigstellungsdatum" #: build/models.py:233 -#, fuzzy -#| msgid "Completed" msgid "completed by" -msgstr "Fertig" +msgstr "Fertiggestellt von" #: build/models.py:241 -#, fuzzy -#| msgid "Issued By" msgid "Issued by" msgstr "Aufgegeben von" @@ -640,7 +632,7 @@ msgstr "Notizen" #: build/models.py:262 msgid "Extra build notes" -msgstr "Extranotizen für den Bau" +msgstr "Extranotizen für den Bauauftrag" #: build/models.py:673 msgid "No build output specified" @@ -1401,7 +1393,7 @@ msgstr "Kaufbar" #: common/models.py:172 msgid "Parts are purchaseable by default" -msgstr "Artikel kaufbar als Standard" +msgstr "Artikel sind grundsätzlich kaufbar" #: common/models.py:178 part/models.py:855 part/templates/part/detail.html:210 #: templates/js/table_filters.js:312 @@ -1410,7 +1402,7 @@ msgstr "Verkäuflich" #: common/models.py:179 msgid "Parts are salable by default" -msgstr "Artikel verkaufbar als Standard" +msgstr "Artikel sind grundsätzlich verkaufbar" #: common/models.py:185 part/models.py:845 part/templates/part/detail.html:190 #: templates/js/table_filters.js:32 templates/js/table_filters.js:316 @@ -1419,7 +1411,7 @@ msgstr "nachverfolgbar" #: common/models.py:186 msgid "Parts are trackable by default" -msgstr "Artikel verfolgbar als Standard" +msgstr "Artikel sind grundsätzlich verfolgbar" #: common/models.py:192 part/models.py:865 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 @@ -1436,7 +1428,7 @@ msgstr "zeige Bestand in Eingabemasken" #: common/models.py:200 msgid "Display available part quantity in some forms" -msgstr "zeige den verfügbaren Bestand in einigen Eingabemasken" +msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" #: common/models.py:206 msgid "Debug Mode" @@ -1444,7 +1436,7 @@ msgstr "Entwickler-Modus" #: common/models.py:207 msgid "Generate reports in debug mode (HTML output)" -msgstr "Bercihte ich Entwickler-Modus generieren (als HTML)" +msgstr "Berichte im Entwickler-Modus generieren (als HTML)" #: common/models.py:213 msgid "Page Size" @@ -1468,7 +1460,7 @@ msgstr "Bestands-Ablauf" #: common/models.py:232 msgid "Enable stock expiry functionality" -msgstr "Bestands-Ablauf ermöglichen" +msgstr "Ablaufen von Bestand ermöglichen" #: common/models.py:238 msgid "Sell Expired Stock" @@ -1485,8 +1477,8 @@ msgstr "Bestands-Stehzeit" #: common/models.py:246 msgid "Number of days stock items are considered stale before expiring" msgstr "" -"Anzahl an Tagen an denen Bestandsobjekte als abgestanden markiert werden " -"bevor sie ablaufen" +"Anzahl an Tagen, an denen Bestand als abgestanden markiert wird, bevor sie " +"ablaufen" #: common/models.py:248 part/templates/part/detail.html:121 msgid "days" @@ -1514,7 +1506,7 @@ msgstr "Gruppieren nach Teil" #: common/models.py:268 msgid "Group stock items by part reference in table views" -msgstr "BestandsObjekte in Tabellen anhand von Teil-Referenz gruppieren" +msgstr "Bestand in Tabellen anhand von Teil-Referenz gruppieren" #: common/models.py:274 msgid "Recent Stock Count" @@ -1522,7 +1514,7 @@ msgstr "aktueller Bestand" #: common/models.py:275 msgid "Number of recent stock items to display on index page" -msgstr "Anzahl der aktuellen BestandsObjekte auf der Startseite" +msgstr "Anzahl des geänderten Bestands auf der Startseite" #: common/models.py:281 msgid "Build Order Reference Prefix" @@ -1694,30 +1686,24 @@ msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" #: company/models.py:129 -#, fuzzy -#| msgid "Customer" msgid "is customer" -msgstr "Kunde" +msgstr "ist Kunde" #: company/models.py:129 msgid "Do you sell items to this company?" msgstr "Verkaufen Sie Teile an diese Firma?" #: company/models.py:131 -#, fuzzy -#| msgid "Supplier" msgid "is supplier" -msgstr "Zulieferer" +msgstr "ist Zulieferer" #: company/models.py:131 msgid "Do you purchase items from this company?" msgstr "Kaufen Sie Teile von dieser Firma?" #: company/models.py:133 -#, fuzzy -#| msgid "Manufacturer" msgid "is manufacturer" -msgstr "Hersteller" +msgstr "ist Hersteller" #: company/models.py:133 msgid "Does this company manufacture parts?" @@ -1811,13 +1797,11 @@ msgstr "Verpackungen" #: company/models.py:371 msgid "Part packaging" -msgstr "Teile-Packaging" +msgstr "Teile-Verpackungen" #: company/models.py:373 -#, fuzzy -#| msgid "Order Multiple" msgid "multiple" -msgstr "Bestellvielfaches" +msgstr "Vielfache" #: company/templates/company/assigned_stock.html:10 #: company/templates/company/navbar.html:51 @@ -1846,10 +1830,8 @@ msgid "Create Purchase Order" msgstr "Bestellung anlegen" #: company/templates/company/company_base.html:51 -#, fuzzy -#| msgid "Edited company information" msgid "Edit company information" -msgstr "Firmeninformation bearbeitet" +msgstr "Firmeninformation bearbeiten" #: company/templates/company/company_base.html:56 company/views.py:324 msgid "Delete Company" @@ -2318,16 +2300,12 @@ msgid "" msgstr "Zieldatum für Auftrags-Fertigstellung." #: order/forms.py:233 -#, fuzzy -#| msgid "Part stock is tracked by serial number" msgid "Enter stock item serial numbers" -msgstr "Teilebestand wird per Seriennummer verfolgt" +msgstr "Seriennummern für BestandsObjekt eingeben" #: order/forms.py:239 -#, fuzzy -#| msgid "Select quantity of stock to allocate" msgid "Enter quantity of stock items" -msgstr "Menge der BestandsObjekt für Zuordnung auswählen" +msgstr "Menge der BestandsObjekt eingeben" #: order/models.py:99 msgid "Order reference" @@ -2448,10 +2426,8 @@ msgid "Unit purchase price" msgstr "EK-Preis pro Einheit" #: order/models.py:736 order/models.py:738 -#, fuzzy -#| msgid "Stock item has been allocated" msgid "Stock item has not been assigned" -msgstr "BestandsObjekt zugewiesen" +msgstr "BestandsObjekt wurde nicht zugewiesen" #: order/models.py:742 msgid "Cannot allocate stock item to a line with a different part" @@ -2585,10 +2561,8 @@ msgid "Select Purchase Order" msgstr "Bestellung auswählen" #: order/templates/order/order_wizard/select_pos.html:45 -#, fuzzy -#| msgid "Create new purchase order" msgid "Create new purchase order for {{ supplier.name }}" -msgstr "Neue Bestellung anlegen" +msgstr "Neue Bestellung für {{ supplier.name }} anlegen" #: order/templates/order/order_wizard/select_pos.html:68 msgid "Select a purchase order for" @@ -2684,10 +2658,8 @@ msgid "Error: Referenced part has been removed" msgstr "Fehler: verknüpftes Teil wurde gelöscht" #: order/templates/order/receive_parts.html:57 -#, fuzzy -#| msgid "Remove allocation" msgid "Remove line" -msgstr "Zuordnung entfernen" +msgstr "Position entfernen" #: order/templates/order/sales_order_base.html:15 msgid "This SalesOrder has not been fully allocated" @@ -2745,20 +2717,16 @@ msgid "Fulfilled" msgstr "Erledigt" #: order/templates/order/sales_order_detail.html:279 -#, fuzzy -#| msgid "Add serial number" msgid "Allocate serial numbers" -msgstr "Seriennummer hinzufügen" +msgstr "Seriennummern zuweisen" #: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585 msgid "Allocate stock" msgstr "Lagerbestand zuweisen" #: order/templates/order/sales_order_detail.html:285 -#, fuzzy -#| msgid "Purchase Price" msgid "Purchase stock" -msgstr "EK-Preis" +msgstr "Einkaufs-Bestand" #: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578 #: templates/js/build.js:992 @@ -2800,10 +2768,8 @@ msgstr "" "ist." #: order/templates/order/so_allocate_by_serial.html:9 -#, fuzzy -#| msgid "Part stock is tracked by serial number" msgid "Allocate stock items by serial number" -msgstr "Teilebestand wird per Seriennummer verfolgt" +msgstr "Teilebestand per Seriennummer zuweisen" #: order/templates/order/so_allocation_delete.html:7 msgid "This action will unallocate the following stock from the Sales Order" @@ -2935,40 +2901,28 @@ msgid "Deleted line item" msgstr "Position gelöscht" #: order/views.py:1306 -#, fuzzy -#| msgid "Latest Serial Number" msgid "Allocate Serial Numbers" -msgstr "letzte Seriennummer" +msgstr "Seriennummern zuweisen" #: order/views.py:1351 -#, fuzzy -#| msgid "Items" msgid "items" -msgstr "Positionen" +msgstr "Teile" #: order/views.py:1367 -#, fuzzy -#| msgid "Delete line item" msgid "Select line item" -msgstr "Position löschen" +msgstr "Position auswählen" #: order/views.py:1398 -#, fuzzy -#| msgid "No matching stock item found" msgid "No matching item for serial" -msgstr "Keine passende BestandsObjekt gefunden" +msgstr "Kein passends Teil für Seriennummer gefunden" #: order/views.py:1408 -#, fuzzy -#| msgid "Count stock" msgid "is not in stock" -msgstr "Bestand zählen" +msgstr "ist nicht auf Lager" #: order/views.py:1416 -#, fuzzy -#| msgid "Allocated to Orders" msgid "already allocated to an order" -msgstr "zu Bauaufträgen zugeordnet" +msgstr "bereits einem Auftrag zugeordnet" #: order/views.py:1470 msgid "Allocate Stock to Order" @@ -3130,10 +3084,8 @@ msgid "Default location for parts in this category" msgstr "Standard-Lagerort für Teile dieser Kategorie" #: part/models.py:76 -#, fuzzy -#| msgid "Default Currency" msgid "Default keywords" -msgstr "Standard-Währung" +msgstr "Standard Stichwörter" #: part/models.py:76 msgid "Default keywords for parts in this category" @@ -3312,8 +3264,6 @@ msgid "Part notes - supports Markdown formatting" msgstr "Bemerkungen - unterstüzt Markdown-Formatierung" #: part/models.py:874 -#, fuzzy -#| msgid "BOM line checksum" msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" @@ -3323,11 +3273,11 @@ msgstr "Prüfsumme der Stückliste gespeichert" #: part/models.py:877 msgid "BOM checked by" -msgstr "" +msgstr "Stückliste kontrolliert von" #: part/models.py:879 msgid "BOM checked date" -msgstr "" +msgstr "BOM Kontrolldatum" #: part/models.py:881 part/templates/part/detail.html:126 #: templates/js/order.js:293 @@ -3335,10 +3285,8 @@ msgid "Creation Date" msgstr "Erstelldatum" #: part/models.py:883 -#, fuzzy -#| msgid "Creation Date" msgid "Creation User" -msgstr "Erstelldatum" +msgstr "Erstellungs-Nutzer" #: part/models.py:1927 msgid "Test templates can only be created for trackable parts" @@ -3409,10 +3357,8 @@ msgid "Parameter Template" msgstr "Parameter Vorlage" #: part/models.py:2058 -#, fuzzy -#| msgid "Test Data" msgid "Data" -msgstr "Testdaten" +msgstr "Wert" #: part/models.py:2058 msgid "Parameter Value" @@ -3605,10 +3551,8 @@ msgid "File Fields" msgstr "Datei-Felder" #: part/templates/part/bom_upload/select_fields.html:47 -#, fuzzy -#| msgid "Remove row" msgid "Remove column" -msgstr "Zeile entfernen" +msgstr "Spalte entfernen" #: part/templates/part/bom_upload/select_fields.html:58 msgid "Match Fields" @@ -3888,11 +3832,11 @@ msgstr "Teil kann nicht in Baugruppen benutzt werden" #: part/templates/part/detail.html:193 msgid "Part stock is tracked by serial number" -msgstr "Teilebestand wird per Seriennummer verfolgt" +msgstr "Teil wird per Seriennummer verfolgt" #: part/templates/part/detail.html:195 msgid "Part stock is not tracked by serial number" -msgstr "Teilebestand wird nicht per Seriennummer verfolgt" +msgstr "Teil wird nicht per Seriennummer verfolgt" #: part/templates/part/detail.html:203 part/templates/part/detail.html:205 msgid "Part can be purchased from external suppliers" @@ -3986,16 +3930,12 @@ msgid "Delete" msgstr "Löschen" #: part/templates/part/params.html:68 -#, fuzzy -#| msgid "Template" msgid "New Template" -msgstr "Vorlage" +msgstr "Neue Vorlage" #: part/templates/part/params.html:69 -#, fuzzy -#| msgid "Create Part Parameter Template" msgid "Create New Parameter Template" -msgstr "Teilparametervorlage anlegen" +msgstr "Neue Teilparametervorlage anlegen" #: part/templates/part/part_app_base.html:11 msgid "Part List" @@ -4082,61 +4022,45 @@ msgstr "Im Bau" #: part/templates/part/part_base.html:249 msgid "Calculate" -msgstr "" +msgstr "Berechnen" #: part/templates/part/part_pricing.html:8 -#, fuzzy -#| msgid "Pricing Information" msgid "Pricing information for:" -msgstr "Preisinformationen ansehen" +msgstr "Preisinformationen für:" #: part/templates/part/part_pricing.html:24 -#, fuzzy -#| msgid "Supplier Part Pricing" msgid "Supplier Pricing" -msgstr "Zulieferer-Teil Bepreisung" +msgstr "Zulieferer-Preise" #: part/templates/part/part_pricing.html:28 #: part/templates/part/part_pricing.html:54 -#, fuzzy -#| msgid "Units" msgid "Unit Cost" -msgstr "Einheiten" +msgstr "Stückpreis" #: part/templates/part/part_pricing.html:34 #: part/templates/part/part_pricing.html:60 msgid "Total Cost" -msgstr "" +msgstr "Gesamtkosten" #: part/templates/part/part_pricing.html:42 -#, fuzzy -#| msgid "No pricing available" msgid "No supplier pricing available" -msgstr "Keine Preisinformation verfügbar" +msgstr "Keine Zulieferer-Preise verfügbar" #: part/templates/part/part_pricing.html:50 -#, fuzzy -#| msgid "BOM Price" msgid "BOM Pricing" -msgstr "Stücklistenpreis" +msgstr "Stücklistenpreise" #: part/templates/part/part_pricing.html:68 -#, fuzzy -#| msgid "BOM pricing is incomplete" msgid "Note: BOM pricing is incomplete for this part" -msgstr "Stücklistenbepreisung ist unvollständig" +msgstr "Anmerkung: Stücklistenbepreisung für dieses Teil ist unvollständig" #: part/templates/part/part_pricing.html:75 -#, fuzzy -#| msgid "No pricing available" msgid "No BOM pricing available" -msgstr "Keine Preisinformation verfügbar" +msgstr "Keine Stücklisten-Preise verfügbar" #: part/templates/part/part_pricing.html:85 -#, fuzzy -#| msgid "No price breaks have been added for this part" msgid "No pricing information is available for this part." -msgstr "Keine Preisstaffelung für dieses Teil" +msgstr "Keine Preise für dieses Teil verfügbar" #: part/templates/part/part_tests.html:17 msgid "Add Test Template" @@ -4181,7 +4105,7 @@ msgstr "Kein Bestand" #: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:129 msgid "Low Stock" -msgstr "Niedriger Bestand" +msgstr "niedriger Bestand" #: part/templates/part/subcategories.html:5 msgid "Child Categories" @@ -5020,7 +4944,7 @@ msgstr "Barcode-Bezeichner" #: stock/templates/stock/item_base.html:302 templates/InvenTree/search.html:167 #: templates/js/build.js:655 templates/navbar.html:29 msgid "Build" -msgstr "Bau" +msgstr "Bauauftrag" #: stock/templates/stock/item_base.html:323 msgid "Parent Item" @@ -5194,10 +5118,8 @@ msgid "Children" msgstr "Kinder" #: stock/templates/stock/stock_adjust.html:43 -#, fuzzy -#| msgid "Remove stock item" msgid "Remove item" -msgstr "BestandsObjekt entfernen" +msgstr "Teil entfernen" #: stock/templates/stock/stock_app_base.html:15 msgid "Loading..." @@ -5438,7 +5360,7 @@ msgstr "neueste Teile" #: templates/InvenTree/index.html:99 msgid "BOM Waiting Validation" -msgstr "Stücklisten erwartet Validierung" +msgstr "Stücklisten erwarten Validierung" #: templates/InvenTree/index.html:128 msgid "Recently Updated" @@ -5482,7 +5404,7 @@ msgstr "Suchergebnisse" #: templates/InvenTree/search.html:23 msgid "Enter a search query" -msgstr "eine Suche angeben" +msgstr "Eine Sucheanfrage eingeben" #: templates/InvenTree/search.html:252 templates/js/stock.js:301 msgid "Shipped to customer" @@ -5602,7 +5524,7 @@ msgstr "InvenTree-Einstellungen" #: templates/InvenTree/settings/tabs.html:16 msgid "Global" -msgstr "Global" +msgstr "Systemweit" #: templates/InvenTree/settings/tabs.html:19 msgid "Report" @@ -5898,7 +5820,7 @@ msgstr "Bestand bestellen" #: templates/js/build.js:632 msgid "No builds matching query" -msgstr "Keine Baue passen zur Anfrage" +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 @@ -5938,28 +5860,20 @@ msgid "Assembled part" msgstr "Baugruppe" #: templates/js/filters.js:193 -#, fuzzy -#| msgid "Select Category" msgid "Select filter" -msgstr "Kategorie auswählen" +msgstr "Filter auswählen" #: templates/js/filters.js:268 -#, fuzzy -#| msgid "Add new parameter" msgid "Add new filter" -msgstr "Parameter hinzufügen" +msgstr "Filter hinzufügen" #: templates/js/filters.js:271 -#, fuzzy -#| msgid "Part Filters" msgid "Clear all filters" -msgstr "Teil Filter" +msgstr "Filter entfernen" #: templates/js/filters.js:296 -#, fuzzy -#| msgid "Create Variant" msgid "Create filter" -msgstr "Variante anlegen" +msgstr "Filter anlegen" #: templates/js/label.js:10 templates/js/report.js:98 msgid "Select Stock Items" @@ -6004,7 +5918,7 @@ msgstr "Label-Vorlage auswählen" #: templates/js/modals.js:256 msgid "Waiting for server..." -msgstr "" +msgstr "Warte auf Server..." #: templates/js/modals.js:406 msgid "Show Error Information" @@ -6025,7 +5939,7 @@ msgstr "Lade Daten" #: templates/js/modals.js:549 templates/js/modals.js:808 #: templates/modals.html:29 templates/modals.html:53 msgid "Submit" -msgstr "abschicken" +msgstr "Abschicken" #: templates/js/modals.js:550 templates/js/modals.js:809 #: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93 @@ -6192,7 +6106,7 @@ msgstr "BestandsObjekt(e) müssen vor dem Reportdruck ausgewählt werden" #: templates/js/report.js:223 templates/js/report.js:277 #: templates/js/report.js:331 msgid "No Reports Found" -msgstr "Keine Reports gefunden" +msgstr "Keine Berichte gefunden" #: templates/js/report.js:117 msgid "No report templates found which match selected stock item(s)" @@ -6355,16 +6269,12 @@ msgid "No user information" msgstr "Keine Benutzerinformation" #: templates/js/stock.js:979 -#, fuzzy -#| msgid "Edit Stock Tracking Entry" msgid "Edit tracking entry" -msgstr "Lagerbestands-Tracking-Eintrag bearbeiten" +msgstr "Tracking-Eintrag bearbeiten" #: templates/js/stock.js:980 -#, fuzzy -#| msgid "Delete Stock Tracking Entry" msgid "Delete tracking entry" -msgstr "Lagerbestands-Tracking-Eintrag löschen" +msgstr "Tracking-Eintrag löschen" #: templates/js/stock.js:1089 msgid "Create New Location" @@ -6674,7 +6584,7 @@ msgstr "Serverstatus" #: templates/stats.html:21 msgid "Healthy" -msgstr "Gesundheit" +msgstr "Gesund" #: templates/stats.html:23 msgid "Issues detected" @@ -6698,7 +6608,7 @@ msgstr "Label drucken" #: templates/stock_table.html:42 msgid "Print test reports" -msgstr "Test Reports drucken" +msgstr "Test-Berichte drucken" #: templates/stock_table.html:53 msgid "Add to selected stock items" @@ -6800,9 +6710,94 @@ msgstr "Berechtigungen Einträge zu ändern" msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" +#~ msgid "Create purchase order" +#~ msgstr "Neue Bestellung anlegen" + +#~ msgid "Delete company" +#~ msgstr "Firma löschen" + +#, fuzzy +#~| msgid "Show QR Code" +#~ msgid "Show QR code" +#~ msgstr "QR-Code anzeigen" + #~ msgid "Serial numbers" #~ msgstr "Seriennummern" +#~ msgid "name" +#~ msgstr "Name" + +#~ msgid "description" +#~ msgstr "Beschreibung" + +#~ msgid "target date" +#~ msgstr "Zieldatum" + +#~ msgid "data" +#~ msgstr "Wert" + +#~ msgid "attachment" +#~ msgstr "Anhang" + +#~ msgid "comment" +#~ msgstr "Kommentar" + +#~ msgid "user" +#~ msgstr "Benutzer" + +#, fuzzy +#~| msgid "Completion Date" +#~ msgid "completion date" +#~ msgstr "Fertigstellungsdatum" + +#, fuzzy +#~| msgid "Responsible" +#~ msgid "responsible" +#~ msgstr "Verantwortlicher Benutzer" + +#, fuzzy +#~| msgid "Currency" +#~ msgid "currency" +#~ msgstr "Währung" + +#, fuzzy +#~| msgid "Packaging" +#~ msgid "packaging" +#~ msgstr "Verpackungen" + +#, fuzzy +#~| msgid "Default Location" +#~ msgid "Default location" +#~ msgstr "Standard-Lagerort" + +#~ msgid "creation date" +#~ msgstr "Erstelldatum" + +#, fuzzy +#~| msgid "parts" +#~ msgid "part" +#~ msgstr "Teile" + +#, fuzzy +#~| msgid "Template" +#~ msgid "template" +#~ msgstr "Vorlage" + +#, fuzzy +#~| msgid "Notes" +#~ msgid "notes" +#~ msgstr "Notizen" + +#, fuzzy +#~| msgid "Unlink" +#~ msgid "link" +#~ msgstr "Entfernen" + +#, fuzzy +#~| msgid "Default Location" +#~ msgid "Default_location" +#~ msgstr "Standard-Lagerort" + #~ msgid "Buy parts" #~ msgstr "Teile kaufen" From c68220a597f33aa17157cde49885198e7cab314f Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sat, 3 Apr 2021 14:11:28 +0200 Subject: [PATCH 08/16] migrations for all the translated models, totally forgot that --- .../migrations/0027_auto_20210403_1210.py | 58 +++++++++ .../migrations/0032_auto_20210403_1210.py | 44 +++++++ .../migrations/0044_auto_20210403_1210.py | 57 +++++++++ .../migrations/0064_auto_20210403_1210.py | 110 ++++++++++++++++++ .../migrations/0059_auto_20210403_1210.py | 70 +++++++++++ 5 files changed, 339 insertions(+) create mode 100644 InvenTree/build/migrations/0027_auto_20210403_1210.py create mode 100644 InvenTree/company/migrations/0032_auto_20210403_1210.py create mode 100644 InvenTree/order/migrations/0044_auto_20210403_1210.py create mode 100644 InvenTree/part/migrations/0064_auto_20210403_1210.py create mode 100644 InvenTree/stock/migrations/0059_auto_20210403_1210.py diff --git a/InvenTree/build/migrations/0027_auto_20210403_1210.py b/InvenTree/build/migrations/0027_auto_20210403_1210.py new file mode 100644 index 0000000000..4f5947f70e --- /dev/null +++ b/InvenTree/build/migrations/0027_auto_20210403_1210.py @@ -0,0 +1,58 @@ +# Generated by Django 3.0.7 on 2021-04-03 12:10 + +import InvenTree.models +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('users', '0005_owner_model'), + ('build', '0026_auto_20210216_1539'), + ] + + operations = [ + migrations.AlterField( + model_name='build', + name='completed_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='builds_completed', to=settings.AUTH_USER_MODEL, verbose_name='completed by'), + ), + migrations.AlterField( + model_name='build', + name='completion_date', + field=models.DateField(blank=True, null=True, verbose_name='Completion Date'), + ), + migrations.AlterField( + model_name='build', + name='issued_by', + field=models.ForeignKey(blank=True, help_text='User who issued this build order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='builds_issued', to=settings.AUTH_USER_MODEL, verbose_name='Issued by'), + ), + migrations.AlterField( + model_name='build', + name='responsible', + field=models.ForeignKey(blank=True, help_text='User responsible for this build order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='builds_responsible', to='users.Owner', verbose_name='Responsible'), + ), + migrations.AlterField( + model_name='buildorderattachment', + name='attachment', + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + ), + migrations.AlterField( + model_name='buildorderattachment', + name='comment', + field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='buildorderattachment', + name='upload_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), + ), + migrations.AlterField( + model_name='buildorderattachment', + name='user', + field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + ] diff --git a/InvenTree/company/migrations/0032_auto_20210403_1210.py b/InvenTree/company/migrations/0032_auto_20210403_1210.py new file mode 100644 index 0000000000..e3572eb3b6 --- /dev/null +++ b/InvenTree/company/migrations/0032_auto_20210403_1210.py @@ -0,0 +1,44 @@ +# Generated by Django 3.0.7 on 2021-04-03 12:10 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0031_auto_20210103_2215'), + ] + + operations = [ + migrations.AlterField( + model_name='company', + name='is_customer', + field=models.BooleanField(default=False, help_text='Do you sell items to this company?', verbose_name='is customer'), + ), + migrations.AlterField( + model_name='company', + name='is_manufacturer', + field=models.BooleanField(default=False, help_text='Does this company manufacture parts?', verbose_name='is manufacturer'), + ), + migrations.AlterField( + model_name='company', + name='is_supplier', + field=models.BooleanField(default=True, help_text='Do you purchase items from this company?', verbose_name='is supplier'), + ), + migrations.AlterField( + model_name='supplierpart', + name='base_cost', + field=models.DecimalField(decimal_places=3, default=0, help_text='Minimum charge (e.g. stocking fee)', max_digits=10, validators=[django.core.validators.MinValueValidator(0)], verbose_name='base cost'), + ), + migrations.AlterField( + model_name='supplierpart', + name='multiple', + field=models.PositiveIntegerField(default=1, help_text='Order multiple', validators=[django.core.validators.MinValueValidator(1)], verbose_name='multiple'), + ), + migrations.AlterField( + model_name='supplierpart', + name='packaging', + field=models.CharField(blank=True, help_text='Part packaging', max_length=50, null=True, verbose_name='Packaging'), + ), + ] diff --git a/InvenTree/order/migrations/0044_auto_20210403_1210.py b/InvenTree/order/migrations/0044_auto_20210403_1210.py new file mode 100644 index 0000000000..e0fa3692fe --- /dev/null +++ b/InvenTree/order/migrations/0044_auto_20210403_1210.py @@ -0,0 +1,57 @@ +# Generated by Django 3.0.7 on 2021-04-03 12:10 + +import InvenTree.models +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('order', '0043_auto_20210330_0013'), + ] + + operations = [ + migrations.AlterField( + model_name='purchaseorderattachment', + name='attachment', + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + ), + migrations.AlterField( + model_name='purchaseorderattachment', + name='comment', + field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='purchaseorderattachment', + name='upload_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), + ), + migrations.AlterField( + model_name='purchaseorderattachment', + name='user', + field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AlterField( + model_name='salesorderattachment', + name='attachment', + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + ), + migrations.AlterField( + model_name='salesorderattachment', + name='comment', + field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='salesorderattachment', + name='upload_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), + ), + migrations.AlterField( + model_name='salesorderattachment', + name='user', + field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + ] diff --git a/InvenTree/part/migrations/0064_auto_20210403_1210.py b/InvenTree/part/migrations/0064_auto_20210403_1210.py new file mode 100644 index 0000000000..d3f4b2b75f --- /dev/null +++ b/InvenTree/part/migrations/0064_auto_20210403_1210.py @@ -0,0 +1,110 @@ +# Generated by Django 3.0.7 on 2021-04-03 12:10 + +import InvenTree.models +import InvenTree.validators +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import mptt.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('stock', '0059_auto_20210403_1210'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('part', '0063_bomitem_inherited'), + ] + + operations = [ + migrations.AlterField( + model_name='part', + name='bom_checked_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='boms_checked', to=settings.AUTH_USER_MODEL, verbose_name='BOM checked by'), + ), + migrations.AlterField( + model_name='part', + name='bom_checked_date', + field=models.DateField(blank=True, null=True, verbose_name='BOM checked date'), + ), + migrations.AlterField( + model_name='part', + name='bom_checksum', + field=models.CharField(blank=True, help_text='Stored BOM checksum', max_length=128, verbose_name='BOM checksum'), + ), + migrations.AlterField( + model_name='part', + name='creation_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='Creation Date'), + ), + migrations.AlterField( + model_name='part', + name='creation_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parts_created', to=settings.AUTH_USER_MODEL, verbose_name='Creation User'), + ), + migrations.AlterField( + model_name='part', + name='responsible', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parts_responible', to=settings.AUTH_USER_MODEL, verbose_name='Responsible'), + ), + migrations.AlterField( + model_name='partattachment', + name='attachment', + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + ), + migrations.AlterField( + model_name='partattachment', + name='comment', + field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='partattachment', + name='upload_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), + ), + migrations.AlterField( + model_name='partattachment', + name='user', + field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AlterField( + model_name='partcategory', + name='default_keywords', + field=models.CharField(blank=True, help_text='Default keywords for parts in this category', max_length=250, null=True, verbose_name='Default keywords'), + ), + migrations.AlterField( + model_name='partcategory', + name='default_location', + field=mptt.fields.TreeForeignKey(blank=True, help_text='Default location for parts in this category', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='default_categories', to='stock.StockLocation', verbose_name='Default Location'), + ), + migrations.AlterField( + model_name='partcategory', + name='description', + field=models.CharField(blank=True, help_text='Description (optional)', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='partcategory', + name='name', + field=models.CharField(help_text='Name', max_length=100, validators=[InvenTree.validators.validate_tree_name], verbose_name='Name'), + ), + migrations.AlterField( + model_name='partcategory', + name='parent', + field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='children', to='part.PartCategory', verbose_name='parent'), + ), + migrations.AlterField( + model_name='partparameter', + name='data', + field=models.CharField(help_text='Parameter Value', max_length=500, verbose_name='Data'), + ), + migrations.AlterField( + model_name='partparameter', + name='part', + field=models.ForeignKey(help_text='Parent Part', on_delete=django.db.models.deletion.CASCADE, related_name='parameters', to='part.Part', verbose_name='Part'), + ), + migrations.AlterField( + model_name='partparameter', + name='template', + field=models.ForeignKey(help_text='Parameter Template', on_delete=django.db.models.deletion.CASCADE, related_name='instances', to='part.PartParameterTemplate', verbose_name='Template'), + ), + ] diff --git a/InvenTree/stock/migrations/0059_auto_20210403_1210.py b/InvenTree/stock/migrations/0059_auto_20210403_1210.py new file mode 100644 index 0000000000..ae11eb7536 --- /dev/null +++ b/InvenTree/stock/migrations/0059_auto_20210403_1210.py @@ -0,0 +1,70 @@ +# Generated by Django 3.0.7 on 2021-04-03 12:10 + +import InvenTree.fields +import InvenTree.models +import InvenTree.validators +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import mptt.fields + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('stock', '0058_stockitem_packaging'), + ] + + operations = [ + migrations.AlterField( + model_name='stockitemattachment', + name='attachment', + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + ), + migrations.AlterField( + model_name='stockitemattachment', + name='comment', + field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='stockitemattachment', + name='upload_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), + ), + migrations.AlterField( + model_name='stockitemattachment', + name='user', + field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AlterField( + model_name='stockitemtracking', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external page for further information', verbose_name='Link'), + ), + migrations.AlterField( + model_name='stockitemtracking', + name='notes', + field=models.CharField(blank=True, help_text='Entry notes', max_length=512, verbose_name='Notes'), + ), + migrations.AlterField( + model_name='stockitemtracking', + name='title', + field=models.CharField(help_text='Tracking entry title', max_length=250, verbose_name='Title'), + ), + migrations.AlterField( + model_name='stocklocation', + name='description', + field=models.CharField(blank=True, help_text='Description (optional)', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='stocklocation', + name='name', + field=models.CharField(help_text='Name', max_length=100, validators=[InvenTree.validators.validate_tree_name], verbose_name='Name'), + ), + migrations.AlterField( + model_name='stocklocation', + name='parent', + field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='children', to='stock.StockLocation', verbose_name='parent'), + ), + ] From 20c455384eedb0be2ce1bd42393026bccb3d9f94 Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sun, 4 Apr 2021 22:44:14 +0200 Subject: [PATCH 09/16] added more translation-strings --- InvenTree/InvenTree/api.py | 2 +- InvenTree/InvenTree/forms.py | 3 + InvenTree/InvenTree/helpers.py | 10 +- InvenTree/InvenTree/validators.py | 2 +- InvenTree/build/forms.py | 13 +- ...403_1210.py => 0027_auto_20210404_2016.py} | 31 +- InvenTree/build/models.py | 12 +- ...403_1210.py => 0032_auto_20210403_1837.py} | 27 +- InvenTree/company/models.py | 11 +- .../company/templates/company/delete.html | 8 +- .../templates/company/detail_part.html | 2 +- InvenTree/label/models.py | 2 +- InvenTree/locale/de/LC_MESSAGES/django.po | 1235 ++++++++++------- InvenTree/locale/en/LC_MESSAGES/django.po | 1130 +++++++++------ InvenTree/locale/es/LC_MESSAGES/django.po | 1130 +++++++++------ InvenTree/order/forms.py | 22 +- .../migrations/0044_auto_20210403_1210.py | 57 - .../migrations/0044_auto_20210404_2016.py | 233 ++++ InvenTree/order/models.py | 48 +- .../order/templates/order/order_complete.html | 8 +- .../order/templates/order/order_issue.html | 4 +- .../order/order_wizard/select_parts.html | 2 +- .../templates/order/sales_order_detail.html | 16 +- InvenTree/part/bom.py | 2 +- InvenTree/part/forms.py | 12 +- .../migrations/0064_auto_20210403_1210.py | 110 -- .../migrations/0064_auto_20210404_2016.py | 218 +++ InvenTree/part/models.py | 43 +- InvenTree/part/templates/part/bom.html | 6 +- .../part/bom_upload/upload_file.html | 2 +- .../part/templates/part/bom_validate.html | 6 +- InvenTree/part/views.py | 2 +- .../migrations/0015_auto_20210403_1837.py | 35 + InvenTree/report/models.py | 6 +- InvenTree/stock/api.py | 4 +- InvenTree/stock/forms.py | 16 +- ...403_1210.py => 0059_auto_20210404_2016.py} | 24 +- InvenTree/stock/models.py | 14 +- InvenTree/stock/views.py | 31 +- 39 files changed, 2886 insertions(+), 1653 deletions(-) rename InvenTree/build/migrations/{0027_auto_20210403_1210.py => 0027_auto_20210404_2016.py} (60%) rename InvenTree/company/migrations/{0032_auto_20210403_1210.py => 0032_auto_20210403_1837.py} (61%) delete mode 100644 InvenTree/order/migrations/0044_auto_20210403_1210.py create mode 100644 InvenTree/order/migrations/0044_auto_20210404_2016.py delete mode 100644 InvenTree/part/migrations/0064_auto_20210403_1210.py create mode 100644 InvenTree/part/migrations/0064_auto_20210404_2016.py create mode 100644 InvenTree/report/migrations/0015_auto_20210403_1837.py rename InvenTree/stock/migrations/{0059_auto_20210403_1210.py => 0059_auto_20210404_2016.py} (69%) diff --git a/InvenTree/InvenTree/api.py b/InvenTree/InvenTree/api.py index 2fc85ef653..2d04195d42 100644 --- a/InvenTree/InvenTree/api.py +++ b/InvenTree/InvenTree/api.py @@ -7,7 +7,7 @@ from __future__ import unicode_literals import logging -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.http import JsonResponse from django_filters.rest_framework import DjangoFilterBackend diff --git a/InvenTree/InvenTree/forms.py b/InvenTree/InvenTree/forms.py index 79cdf49c3d..52d1c8758f 100644 --- a/InvenTree/InvenTree/forms.py +++ b/InvenTree/InvenTree/forms.py @@ -123,6 +123,7 @@ class DeleteForm(forms.Form): confirm_delete = forms.BooleanField( required=False, initial=False, + label=_('Confirm delete'), help_text=_('Confirm item deletion') ) @@ -155,6 +156,7 @@ class SetPasswordForm(HelperForm): required=True, initial='', widget=forms.PasswordInput(attrs={'autocomplete': 'off'}), + label=_('Enter password'), help_text=_('Enter new password')) confirm_password = forms.CharField(max_length=100, @@ -162,6 +164,7 @@ class SetPasswordForm(HelperForm): required=True, initial='', widget=forms.PasswordInput(attrs={'autocomplete': 'off'}), + label=_('Confirm password'), help_text=_('Confirm new password')) class Meta: diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index 62e50bd52f..930204c58c 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -382,17 +382,17 @@ def extract_serial_numbers(serials, expected_quantity): if a < b: for n in range(a, b + 1): if n in numbers: - errors.append(_('Duplicate serial: {n}'.format(n=n))) + errors.append(_('Duplicate serial: {n}').format(n=n)) else: numbers.append(n) else: - errors.append(_("Invalid group: {g}".format(g=group))) + errors.append(_("Invalid group: {g}").format(g=group)) except ValueError: - errors.append(_("Invalid group: {g}".format(g=group))) + errors.append(_("Invalid group: {g}").format(g=group)) continue else: - errors.append(_("Invalid group: {g}".format(g=group))) + errors.append(_("Invalid group: {g}").format(g=group)) continue else: @@ -409,7 +409,7 @@ def extract_serial_numbers(serials, expected_quantity): # The number of extracted serial numbers must match the expected quantity if not expected_quantity == len(numbers): - raise ValidationError([_("Number of unique serial number ({s}) must match quantity ({q})".format(s=len(numbers), q=expected_quantity))]) + raise ValidationError([_("Number of unique serial number ({s}) must match quantity ({q})").format(s=len(numbers), q=expected_quantity)]) return numbers diff --git a/InvenTree/InvenTree/validators.py b/InvenTree/InvenTree/validators.py index 70322df062..f8199ef20b 100644 --- a/InvenTree/InvenTree/validators.py +++ b/InvenTree/InvenTree/validators.py @@ -60,7 +60,7 @@ def validate_part_ipn(value): match = re.search(pattern, value) if match is None: - raise ValidationError(_('IPN must match regex pattern') + " '{pat}'".format(pat=pattern)) + raise ValidationError(_('IPN must match regex pattern {pat}').format(pat=pattern)) def validate_build_order_reference(value): diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index 48be9a0ffa..b947e02887 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -117,6 +117,7 @@ class BuildOutputDeleteForm(HelperForm): confirm = forms.BooleanField( required=False, + label=_('Confirm'), help_text=_('Confirm deletion of build output') ) @@ -138,7 +139,7 @@ class UnallocateBuildForm(HelperForm): Form for auto-de-allocation of stock from a build """ - confirm = forms.BooleanField(required=False, help_text=_('Confirm unallocation of stock')) + confirm = forms.BooleanField(required=False, label=_('Confirm'), help_text=_('Confirm unallocation of stock')) output_id = forms.IntegerField( required=False, @@ -162,7 +163,7 @@ class UnallocateBuildForm(HelperForm): class AutoAllocateForm(HelperForm): """ Form for auto-allocation of stock to a build """ - confirm = forms.BooleanField(required=True, help_text=_('Confirm stock allocation')) + confirm = forms.BooleanField(required=True, label=_('Confirm'), help_text=_('Confirm stock allocation')) # Keep track of which build output we are interested in output = forms.ModelChoiceField( @@ -209,15 +210,17 @@ class CompleteBuildOutputForm(HelperForm): location = forms.ModelChoiceField( queryset=StockLocation.objects.all(), + label = _('Location'), help_text=_('Location of completed parts'), ) confirm_incomplete = forms.BooleanField( required=False, + label=_('Confirm incomplete'), help_text=_("Confirm completion with incomplete stock allocation") ) - confirm = forms.BooleanField(required=True, help_text=_('Confirm build completion')) + confirm = forms.BooleanField(required=True, label=_('Confirm'), help_text=_('Confirm build completion')) output = forms.ModelChoiceField( queryset=StockItem.objects.all(), # Queryset is narrowed in the view @@ -237,7 +240,7 @@ class CompleteBuildOutputForm(HelperForm): class CancelBuildForm(HelperForm): """ Form for cancelling a build """ - confirm_cancel = forms.BooleanField(required=False, help_text=_('Confirm build cancellation')) + confirm_cancel = forms.BooleanField(required=False, label=_('Confirm cancel'), help_text=_('Confirm build cancellation')) class Meta: model = Build @@ -251,7 +254,7 @@ class EditBuildItemForm(HelperForm): Form for creating (or editing) a BuildItem object. """ - quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, help_text=_('Select quantity of stock to allocate')) + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity'), help_text=_('Select quantity of stock to allocate')) part_id = forms.IntegerField(required=False, widget=forms.HiddenInput()) diff --git a/InvenTree/build/migrations/0027_auto_20210403_1210.py b/InvenTree/build/migrations/0027_auto_20210404_2016.py similarity index 60% rename from InvenTree/build/migrations/0027_auto_20210403_1210.py rename to InvenTree/build/migrations/0027_auto_20210404_2016.py index 4f5947f70e..f4a2c1afde 100644 --- a/InvenTree/build/migrations/0027_auto_20210403_1210.py +++ b/InvenTree/build/migrations/0027_auto_20210404_2016.py @@ -1,7 +1,8 @@ -# Generated by Django 3.0.7 on 2021-04-03 12:10 +# Generated by Django 3.0.7 on 2021-04-04 20:16 import InvenTree.models from django.conf import settings +import django.core.validators from django.db import migrations, models import django.db.models.deletion @@ -9,8 +10,9 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('stock', '0058_stockitem_packaging'), ('users', '0005_owner_model'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('build', '0026_auto_20210216_1539'), ] @@ -25,6 +27,11 @@ class Migration(migrations.Migration): name='completion_date', field=models.DateField(blank=True, null=True, verbose_name='Completion Date'), ), + migrations.AlterField( + model_name='build', + name='creation_date', + field=models.DateField(auto_now_add=True, verbose_name='Creation Date'), + ), migrations.AlterField( model_name='build', name='issued_by', @@ -35,6 +42,26 @@ class Migration(migrations.Migration): name='responsible', field=models.ForeignKey(blank=True, help_text='User responsible for this build order', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='builds_responsible', to='users.Owner', verbose_name='Responsible'), ), + migrations.AlterField( + model_name='builditem', + name='build', + field=models.ForeignKey(help_text='Build to allocate parts', on_delete=django.db.models.deletion.CASCADE, related_name='allocated_stock', to='build.Build', verbose_name='Build'), + ), + migrations.AlterField( + model_name='builditem', + name='install_into', + field=models.ForeignKey(blank=True, help_text='Destination stock item', limit_choices_to={'is_building': True}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='items_to_install', to='stock.StockItem', verbose_name='Install into'), + ), + migrations.AlterField( + model_name='builditem', + name='quantity', + field=models.DecimalField(decimal_places=5, default=1, help_text='Stock quantity to allocate to build', max_digits=15, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Quantity'), + ), + migrations.AlterField( + model_name='builditem', + name='stock_item', + field=models.ForeignKey(help_text='Source stock item', limit_choices_to={'belongs_to': None, 'sales_order': None}, on_delete=django.db.models.deletion.CASCADE, related_name='allocations', to='stock.StockItem', verbose_name='Stock Item'), + ), migrations.AlterField( model_name='buildorderattachment', name='attachment', diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index ad0149ed48..4ee8de0d73 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -216,7 +216,7 @@ class Build(MPTTModel): help_text=_('Batch code for this build output') ) - creation_date = models.DateField(auto_now_add=True, editable=False) + creation_date = models.DateField(auto_now_add=True, editable=False, verbose_name=_('Creation Date')) target_date = models.DateField( null=True, blank=True, @@ -1020,14 +1020,14 @@ class BuildItem(models.Model): try: # Allocated part must be in the BOM for the master part if self.stock_item.part not in self.build.part.getRequiredParts(recursive=False): - errors['stock_item'] = [_("Selected stock item not found in BOM for part '{p}'".format(p=self.build.part.full_name))] + errors['stock_item'] = [_("Selected stock item not found in BOM for part '{p}'").format(p=self.build.part.full_name)] # Allocated quantity cannot exceed available stock quantity if self.quantity > self.stock_item.quantity: - errors['quantity'] = [_("Allocated quantity ({n}) must not exceed available quantity ({q})".format( + errors['quantity'] = [_("Allocated quantity ({n}) must not exceed available quantity ({q})").format( n=normalize(self.quantity), q=normalize(self.stock_item.quantity) - ))] + )] # Allocated quantity cannot cause the stock item to be over-allocated if self.stock_item.quantity - self.stock_item.allocation_count() + self.quantity < self.quantity: @@ -1079,6 +1079,7 @@ class BuildItem(models.Model): Build, on_delete=models.CASCADE, related_name='allocated_stock', + verbose_name=_('Build'), help_text=_('Build to allocate parts') ) @@ -1086,6 +1087,7 @@ class BuildItem(models.Model): 'stock.StockItem', on_delete=models.CASCADE, related_name='allocations', + verbose_name=_('Stock Item'), help_text=_('Source stock item'), limit_choices_to={ 'sales_order': None, @@ -1098,6 +1100,7 @@ class BuildItem(models.Model): max_digits=15, default=1, validators=[MinValueValidator(0)], + verbose_name=_('Quantity'), help_text=_('Stock quantity to allocate to build') ) @@ -1106,6 +1109,7 @@ class BuildItem(models.Model): on_delete=models.SET_NULL, blank=True, null=True, related_name='items_to_install', + verbose_name=_('Install into'), help_text=_('Destination stock item'), limit_choices_to={ 'is_building': True, diff --git a/InvenTree/company/migrations/0032_auto_20210403_1210.py b/InvenTree/company/migrations/0032_auto_20210403_1837.py similarity index 61% rename from InvenTree/company/migrations/0032_auto_20210403_1210.py rename to InvenTree/company/migrations/0032_auto_20210403_1837.py index e3572eb3b6..41b6977d31 100644 --- a/InvenTree/company/migrations/0032_auto_20210403_1210.py +++ b/InvenTree/company/migrations/0032_auto_20210403_1837.py @@ -1,7 +1,12 @@ -# Generated by Django 3.0.7 on 2021-04-03 12:10 +# Generated by Django 3.0.7 on 2021-04-03 18:37 +import InvenTree.fields +import company.models import django.core.validators from django.db import migrations, models +import django.db.models.deletion +import markdownx.models +import stdimage.models class Migration(migrations.Migration): @@ -11,6 +16,11 @@ class Migration(migrations.Migration): ] operations = [ + migrations.AlterField( + model_name='company', + name='image', + field=stdimage.models.StdImageField(blank=True, null=True, upload_to=company.models.rename_company_image, verbose_name='Image'), + ), migrations.AlterField( model_name='company', name='is_customer', @@ -26,6 +36,16 @@ class Migration(migrations.Migration): name='is_supplier', field=models.BooleanField(default=True, help_text='Do you purchase items from this company?', verbose_name='is supplier'), ), + migrations.AlterField( + model_name='company', + name='link', + field=InvenTree.fields.InvenTreeURLField(blank=True, help_text='Link to external company information', verbose_name='Link'), + ), + migrations.AlterField( + model_name='company', + name='notes', + field=markdownx.models.MarkdownxField(blank=True, verbose_name='Notes'), + ), migrations.AlterField( model_name='supplierpart', name='base_cost', @@ -41,4 +61,9 @@ class Migration(migrations.Migration): name='packaging', field=models.CharField(blank=True, help_text='Part packaging', max_length=50, null=True, verbose_name='Packaging'), ), + migrations.AlterField( + model_name='supplierpricebreak', + name='part', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pricebreaks', to='company.SupplierPart', verbose_name='Part'), + ), ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index e05d81a16a..17091dcbc3 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -114,7 +114,7 @@ class Company(models.Model): verbose_name=_('Contact'), blank=True, help_text=_('Point of contact')) - link = InvenTreeURLField(blank=True, help_text=_('Link to external company information')) + link = InvenTreeURLField(blank=True, verbose_name=_('Link'), help_text=_('Link to external company information')) image = StdImageField( upload_to=rename_company_image, @@ -122,9 +122,10 @@ class Company(models.Model): blank=True, variations={'thumbnail': (128, 128)}, delete_orphans=True, + verbose_name=_('Image'), ) - notes = MarkdownxField(blank=True) + notes = MarkdownxField(blank=True, verbose_name=_('Notes')) is_customer = models.BooleanField(default=False, verbose_name=_('is customer'), help_text=_('Do you sell items to this company?')) @@ -366,11 +367,11 @@ class SupplierPart(models.Model): help_text=_('Notes') ) - base_cost = models.DecimalField(max_digits=10, decimal_places=3, default=0, validators=[MinValueValidator(0)], verbose_name=('base cost'), help_text=_('Minimum charge (e.g. stocking fee)')) + base_cost = models.DecimalField(max_digits=10, decimal_places=3, default=0, validators=[MinValueValidator(0)], verbose_name=_('base cost'), help_text=_('Minimum charge (e.g. stocking fee)')) packaging = models.CharField(max_length=50, blank=True, null=True, verbose_name=_('Packaging'), help_text=_('Part packaging')) - multiple = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1)], verbose_name=_('multiple'), help_text=('Order multiple')) + multiple = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1)], verbose_name=_('multiple'), help_text=_('Order multiple')) # TODO - Reimplement lead-time as a charfield with special validation (pattern matching). # lead_time = models.DurationField(blank=True, null=True) @@ -530,7 +531,7 @@ class SupplierPriceBreak(common.models.PriceBreak): currency: Reference to the currency of this pricebreak (leave empty for base currency) """ - part = models.ForeignKey(SupplierPart, on_delete=models.CASCADE, related_name='pricebreaks') + part = models.ForeignKey(SupplierPart, on_delete=models.CASCADE, related_name='pricebreaks', verbose_name=_('Part'),) class Meta: unique_together = ("part", "quantity") diff --git a/InvenTree/company/templates/company/delete.html b/InvenTree/company/templates/company/delete.html index 191e07c2f3..3236a7a58d 100644 --- a/InvenTree/company/templates/company/delete.html +++ b/InvenTree/company/templates/company/delete.html @@ -1,14 +1,16 @@ {% extends "modal_delete_form.html" %} +{% load i18n %} + {% block pre_form_content %} -Are you sure you want to delete company '{{ company.name }}'? +{% blocktrans with company.name as name %}Are you sure you want to delete company '{{ name }}'?{% endblocktrans %} <br> {% if company.supplied_part_count > 0 %} -<p>There are {{ company.supplied_part_count }} parts sourced from this company.<br> -If this supplier is deleted, these supplier part entries will also be deleted.</p> +<p>{% blocktrans with company.supplied_part_count as count %}There are {{ count }} parts sourced from this company.<br> +If this supplier is deleted, these supplier part entries will also be deleted.{% endblocktrans %}</p> <ul class='list-group'> {% for part in company.parts.all %} <li class='list-group-item'><b>{{ part.SKU }}</b> - <i>{{ part.part.full_name }}</i></li> diff --git a/InvenTree/company/templates/company/detail_part.html b/InvenTree/company/templates/company/detail_part.html index b12322353a..05aaf78955 100644 --- a/InvenTree/company/templates/company/detail_part.html +++ b/InvenTree/company/templates/company/detail_part.html @@ -15,7 +15,7 @@ {% if roles.purchase_order.change %} <div id='button-toolbar'> <div class='button-toolbar container-fluid'> - <div class='btn-group role='group'> + <div class='btn-group' role='group'> {% if roles.purchase_order.add %} <button class="btn btn-success" id='part-create' title='{% trans "Create new supplier part" %}'> <span class='fas fa-plus-circle'></span> {% trans "New Supplier Part" %} diff --git a/InvenTree/label/models.py b/InvenTree/label/models.py index 0c6a108f31..c76b3f80c8 100644 --- a/InvenTree/label/models.py +++ b/InvenTree/label/models.py @@ -126,7 +126,7 @@ class LabelTemplate(models.Model): width = models.FloatField( default=50, - verbose_name=('Width [mm]'), + verbose_name=_('Width [mm]'), help_text=_('Label width, specified in mm'), validators=[MinValueValidator(2)] ) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index ced6299586..fef729ffa5 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,9 +6,10 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-03 02:10+0000\n" +"POT-Creation-Date: 2021-04-04 20:22+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" +"Last-Translator: Andreas Kaiser <kaiser.vocote@gmail.com>, Matthias " +"MAIR<matmair@live.de>\n" "Language-Team: C <kde-i18n-doc@kde.org>\n" "Language: de\n" "MIME-Version: 1.0\n" @@ -33,32 +34,51 @@ msgstr "Keine passende Aktion gefunden" msgid "Enter date" msgstr "Datum eingeben" -#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:187 +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:132 msgid "Confirm" msgstr "Bestätigen" #: InvenTree/forms.py:126 +#, fuzzy +#| msgid "Confirm item deletion" +msgid "Confirm delete" +msgstr "Löschung von Position bestätigen" + +#: InvenTree/forms.py:127 msgid "Confirm item deletion" msgstr "Löschung von Position bestätigen" -#: InvenTree/forms.py:158 +#: InvenTree/forms.py:159 templates/registration/login.html:76 +msgid "Enter password" +msgstr "Passwort eingeben" + +#: InvenTree/forms.py:160 msgid "Enter new password" msgstr "Neues Passwort eingeben" -#: InvenTree/forms.py:165 +#: InvenTree/forms.py:167 +#, fuzzy +#| msgid "Confirm new password" +msgid "Confirm password" +msgstr "Neues Passwort bestätigen" + +#: InvenTree/forms.py:168 msgid "Confirm new password" msgstr "Neues Passwort bestätigen" -#: InvenTree/forms.py:200 +#: InvenTree/forms.py:203 msgid "Apply Theme" msgstr "Thema anwenden" -#: InvenTree/forms.py:230 +#: InvenTree/forms.py:233 msgid "Select Category" msgstr "Kategorie auswählen" -#: InvenTree/helpers.py:361 order/models.py:242 order/models.py:341 -#: stock/views.py:1762 +#: InvenTree/helpers.py:361 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -92,7 +112,7 @@ msgstr "" "Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) " "übereinstimmen" -#: InvenTree/models.py:59 stock/models.py:1657 +#: InvenTree/models.py:59 stock/models.py:1659 msgid "Attachment" msgstr "Anhang" @@ -108,7 +128,7 @@ msgstr "Kommentar" msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:68 InvenTree/models.py:69 +#: 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 msgid "User" @@ -119,20 +139,21 @@ msgid "upload date" msgstr "Hochladedatum" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 -#: part/models.py:686 part/templates/part/params.html:27 report/models.py:179 -#: templates/InvenTree/search.html:136 templates/InvenTree/search.html:273 -#: templates/js/part.js:109 +#: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:136 +#: templates/InvenTree/search.html:273 templates/js/part.js:109 msgid "Name" msgstr "Name" #: InvenTree/models.py:114 build/models.py:134 -#: build/templates/build/detail.html:21 company/models.py:359 +#: build/templates/build/detail.html:21 company/models.py:361 #: 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 -#: order/templates/order/purchase_order_detail.html:168 part/models.py:710 -#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 -#: report/models.py:192 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 #: report/templates/report/inventree_build_order_base.html:118 #: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 #: templates/InvenTree/search.html:280 @@ -247,7 +268,9 @@ msgid "Invalid character in part name" msgstr "Ungültiger Buchstabe im Teilenamen" #: InvenTree/validators.py:63 -msgid "IPN must match regex pattern" +#, fuzzy, python-brace-format +#| msgid "IPN must match regex pattern" +msgid "IPN must match regex pattern {pat}" msgstr "IPN muss zu Regex-Muster passen" #: InvenTree/validators.py:77 InvenTree/validators.py:91 @@ -345,7 +368,7 @@ msgid "Order target date" msgstr "geplantes Bestelldatum" #: build/forms.py:39 build/templates/build/build_base.html:104 -#: build/templates/build/detail.html:121 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 #: order/templates/order/order_base.html:124 #: order/templates/order/sales_order_base.html:117 #: report/templates/report/inventree_build_order_base.html:126 @@ -359,15 +382,20 @@ msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/forms.py:45 build/forms.py:87 +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 #: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:91 #: build/templates/build/detail.html:31 common/models.py:696 #: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 -#: order/forms.py:237 order/templates/order/order_wizard/select_parts.html:32 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:193 +#: order/templates/order/sales_order_detail.html:70 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:340 +#: part/forms.py:369 part/forms.py:385 part/models.py:2158 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 #: part/templates/part/part_pricing.html:12 @@ -377,7 +405,8 @@ msgstr "Zieldatum für Bauauftrag-Fertigstellung." #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:307 stock/templates/stock/item_base.html:51 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1563 +#: stock/templates/stock/item_base.html:51 #: stock/templates/stock/item_base.html:57 #: stock/templates/stock/item_base.html:240 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 @@ -394,7 +423,7 @@ msgstr "Anzahl der zu bauenden Teile" msgid "Enter quantity for build output" msgstr "Menge für den Bau-Ausgabe angeben" -#: build/forms.py:92 order/forms.py:231 stock/forms.py:117 +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 msgid "Serial Numbers" msgstr "Seriennummer" @@ -406,39 +435,61 @@ msgstr "Seriennummer für dieses hergestelltes Teil eingeben" msgid "Confirm creation of build output" msgstr "Anlage Baufertigstellung bestätigen" -#: build/forms.py:120 +#: build/forms.py:121 msgid "Confirm deletion of build output" msgstr "Löschen des Endprodukt bestätigen" -#: build/forms.py:141 +#: build/forms.py:142 msgid "Confirm unallocation of stock" msgstr "Aufhebung der BestandsZuordnung bestätigen" -#: build/forms.py:165 +#: build/forms.py:166 msgid "Confirm stock allocation" msgstr "Bestandszuordnung bestätigen" -#: build/forms.py:188 +#: build/forms.py:189 msgid "Mark build as complete" msgstr "Bau als vollständig markieren" -#: build/forms.py:212 +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:270 +#: 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 +msgid "Location" +msgstr "Lagerort" + +#: build/forms.py:214 msgid "Location of completed parts" msgstr "Lagerort der fertigen Teile" -#: build/forms.py:217 +#: build/forms.py:219 +#, fuzzy +#| msgid "Confirm build completion" +msgid "Confirm incomplete" +msgstr "Bau-Fertigstellung bestätigen" + +#: build/forms.py:220 msgid "Confirm completion with incomplete stock allocation" msgstr "Fertigstellung mit nicht kompletter Bestandszuordnung bestätigen" -#: build/forms.py:220 +#: build/forms.py:223 msgid "Confirm build completion" msgstr "Bau-Fertigstellung bestätigen" -#: build/forms.py:240 build/views.py:66 +#: build/forms.py:243 +#, fuzzy +#| msgid "Confirm build cancellation" +msgid "Confirm cancel" +msgstr "Bauabbruch bestätigen" + +#: build/forms.py:243 build/views.py:66 msgid "Confirm build cancellation" msgstr "Bauabbruch bestätigen" -#: build/forms.py:254 +#: build/forms.py:257 msgid "Select quantity of stock to allocate" msgstr "Menge der BestandsObjekt für Zuordnung auswählen" @@ -463,7 +514,9 @@ msgstr "Bauaufträge" msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:127 order/templates/order/purchase_order_detail.html:188 +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:188 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2167 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 #: templates/js/build.js:509 templates/js/build.js:948 @@ -485,11 +538,15 @@ msgstr "Bauauftrag, zu dem dieser Bau 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 order/models.py:662 +#: build/templates/build/detail.html:26 company/models.py:535 +#: 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 -#: order/templates/order/receive_parts.html:19 part/models.py:321 -#: part/models.py:2054 part/templates/part/part_app_base.html:7 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1856 part/models.py:1868 part/models.py:1886 +#: part/models.py:1961 part/models.py:2057 part/models.py:2142 +#: part/templates/part/part_app_base.html:7 #: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 @@ -561,7 +618,7 @@ msgstr "Bau-Status" msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:212 stock/models.py:429 +#: build/models.py:212 stock/models.py:430 msgid "Batch Code" msgstr "Losnummer" @@ -569,11 +626,16 @@ msgstr "Losnummer" msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:223 order/models.py:447 +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "Erstelldatum" + +#: build/models.py:223 order/models.py:451 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:227 order/models.py:215 +#: build/models.py:227 order/models.py:218 msgid "Completion Date" msgstr "Fertigstellungsdatum" @@ -590,9 +652,9 @@ msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" #: build/models.py:250 build/templates/build/build_base.html:142 -#: build/templates/build/detail.html:105 order/models.py:118 +#: build/templates/build/detail.html:105 order/models.py:119 #: order/templates/order/order_base.html:138 -#: order/templates/order/sales_order_base.html:138 part/models.py:885 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 #: report/templates/report/inventree_build_order_base.html:159 msgid "Responsible" msgstr "Verantwortlicher Benutzer" @@ -605,26 +667,28 @@ msgstr "Nutzer der für diesen Bauauftrag zuständig ist" #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 -#: stock/models.py:423 stock/templates/stock/item_base.html:330 +#: stock/models.py:424 stock/templates/stock/item_base.html:330 msgid "External Link" msgstr "Externer Link" -#: build/models.py:257 part/models.py:744 stock/models.py:425 +#: build/models.py:257 part/models.py:744 stock/models.py:426 msgid "Link to external URL" msgstr "Link zu einer externen URL" #: build/models.py:261 build/templates/build/navbar.html:59 -#: company/models.py:366 company/templates/company/navbar.html:59 -#: company/templates/company/navbar.html:62 -#: order/templates/order/po_navbar.html:29 +#: company/models.py:129 company/models.py:368 +#: 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 #: order/templates/order/po_navbar.html:32 #: order/templates/order/purchase_order_detail.html:227 +#: order/templates/order/sales_order_detail.html:264 #: order/templates/order/so_navbar.html:33 -#: order/templates/order/so_navbar.html:36 part/models.py:870 +#: order/templates/order/so_navbar.html:36 part/models.py:871 #: part/templates/part/navbar.html:122 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:316 stock/forms.py:348 stock/forms.py:376 stock/models.py:495 -#: stock/models.py:1553 stock/models.py:1663 +#: 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 msgid "Notes" @@ -672,11 +736,11 @@ msgstr "" "Reserviermenge ({n}) muss kleiner Bestandsmenge ({q}) sein. Zugewiesene " "Anzahl ({n}) darf nicht die verfügbare ({q}) Anzahl überschreiten" -#: build/models.py:1034 order/models.py:751 +#: build/models.py:1034 order/models.py:758 msgid "StockItem is over-allocated" msgstr "Zu viele BestandsObjekt zugewiesen" -#: build/models.py:1038 order/models.py:754 +#: build/models.py:1038 order/models.py:761 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" @@ -684,19 +748,43 @@ msgstr "Reserviermenge muss größer null sein" msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1082 +#: build/models.py:1082 stock/templates/stock/item_base.html:302 +#: templates/InvenTree/search.html:167 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "Bauauftrag" + +#: build/models.py:1083 msgid "Build to allocate parts" msgstr "Bau starten um Teile zuzuweisen" -#: build/models.py:1089 +#: build/models.py:1090 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: 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 +msgid "Stock Item" +msgstr "BestandsObjekt" + +#: build/models.py:1091 msgid "Source stock item" msgstr "Quell-BestandsObjekt" -#: build/models.py:1101 +#: build/models.py:1104 msgid "Stock quantity to allocate to build" msgstr "BestandsObjekt-Anzahl dem Bau zuweisen" -#: build/models.py:1109 +#: build/models.py:1112 +#, fuzzy +#| msgid "Install item" +msgid "Install into" +msgstr "Installiere Objekt" + +#: build/models.py:1113 msgid "Destination stock item" msgstr "Ziel-BestandsObjekt" @@ -765,15 +853,6 @@ msgid "" msgstr "" "Die folgenden BestandsObjekte werden den ausgewählten Endprodukten zugeordnet" -#: build/templates/build/auto_allocate.html:18 stock/forms.py:346 -#: stock/templates/stock/item_base.html:270 -#: 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 -msgid "Location" -msgstr "Lagerort" - #: build/templates/build/auto_allocate.html:37 msgid "No stock items found that can be automatically allocated to this build" msgstr "" @@ -846,7 +925,7 @@ msgid "Build Details" msgstr "Bau-Status" #: build/templates/build/build_base.html:96 -#: build/templates/build/detail.html:59 +#: build/templates/build/detail.html:59 order/models.py:445 #: order/templates/order/receive_parts.html:24 #: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236 #: templates/js/barcode.js:119 templates/js/build.js:710 @@ -865,7 +944,7 @@ msgid "Progress" msgstr "Fortschritt" #: build/templates/build/build_base.html:128 -#: build/templates/build/detail.html:84 order/models.py:660 +#: build/templates/build/detail.html:84 order/models.py:667 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 #: order/templates/order/sales_order_ship.html:25 @@ -979,7 +1058,7 @@ msgstr "Ausgangs-Lager" msgid "Stock can be taken from any available location." msgstr "Bestand kann jedem verfügbaren Lagerort entnommen werden." -#: build/templates/build/detail.html:46 stock/forms.py:374 +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 msgid "Destination" msgstr "Ziel" @@ -1115,7 +1194,7 @@ msgstr "Bestand dem Endprodukt zuweisen" msgid "Create Build Output" msgstr "Endprodukt anlegen" -#: build/views.py:203 stock/models.py:964 stock/views.py:1788 +#: build/views.py:203 stock/models.py:966 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" @@ -1255,7 +1334,7 @@ msgstr "InvenTree Instanzname" msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/models.py:62 company/models.py:95 company/models.py:96 +#: common/models.py:62 company/models.py:96 company/models.py:97 msgid "Company name" msgstr "Firmenname" @@ -1359,8 +1438,8 @@ msgstr "Aktuelle Teile-Stände" msgid "Number of recent parts to display on index page" msgstr "Anzahl der neusten Teile auf der Startseite" -#: common/models.py:150 part/models.py:2056 part/templates/part/detail.html:160 -#: report/models.py:185 stock/forms.py:258 templates/js/table_filters.js:24 +#: common/models.py:150 part/models.py:2059 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 #: templates/js/table_filters.js:288 msgid "Template" msgstr "Vorlage" @@ -1369,7 +1448,7 @@ msgstr "Vorlage" msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/models.py:157 part/models.py:833 part/templates/part/detail.html:170 +#: common/models.py:157 part/models.py:834 part/templates/part/detail.html:170 #: templates/js/table_filters.js:101 templates/js/table_filters.js:300 msgid "Assembly" msgstr "Baugruppe" @@ -1378,7 +1457,7 @@ msgstr "Baugruppe" msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/models.py:164 part/models.py:839 part/templates/part/detail.html:180 +#: common/models.py:164 part/models.py:840 part/templates/part/detail.html:180 #: templates/js/table_filters.js:304 msgid "Component" msgstr "Komponente" @@ -1387,7 +1466,7 @@ msgstr "Komponente" msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/models.py:171 part/models.py:850 part/templates/part/detail.html:200 +#: common/models.py:171 part/models.py:851 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "Kaufbar" @@ -1395,7 +1474,7 @@ msgstr "Kaufbar" msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/models.py:178 part/models.py:855 part/templates/part/detail.html:210 +#: common/models.py:178 part/models.py:856 part/templates/part/detail.html:210 #: templates/js/table_filters.js:312 msgid "Salable" msgstr "Verkäuflich" @@ -1404,7 +1483,7 @@ msgstr "Verkäuflich" msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/models.py:185 part/models.py:845 part/templates/part/detail.html:190 +#: common/models.py:185 part/models.py:846 part/templates/part/detail.html:190 #: templates/js/table_filters.js:32 templates/js/table_filters.js:316 msgid "Trackable" msgstr "nachverfolgbar" @@ -1413,7 +1492,7 @@ msgstr "nachverfolgbar" msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/models.py:192 part/models.py:865 part/templates/part/detail.html:150 +#: common/models.py:192 part/models.py:866 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "Virtuell" @@ -1607,12 +1686,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:137 +#: company/forms.py:37 company/models.py:139 #: company/templates/company/detail.html:40 msgid "Currency" msgstr "Währung" -#: company/forms.py:38 company/models.py:139 +#: company/forms.py:38 company/models.py:141 msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" @@ -1632,95 +1711,108 @@ msgstr "Einzelpreis" msgid "Single quantity price" msgstr "Einzelpreis" -#: company/models.py:98 +#: company/models.py:99 msgid "Company description" msgstr "Firmenbeschreibung" -#: company/models.py:98 +#: company/models.py:99 msgid "Description of the company" msgstr "Firmenbeschreibung" -#: company/models.py:100 company/templates/company/company_base.html:70 +#: company/models.py:101 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:100 +#: company/models.py:101 msgid "Company website URL" msgstr "Firmenwebsite Adresse/URL" -#: company/models.py:103 company/templates/company/company_base.html:77 +#: company/models.py:104 company/templates/company/company_base.html:77 msgid "Address" msgstr "Adresse" -#: company/models.py:104 +#: company/models.py:105 msgid "Company address" msgstr "Firmenadresse" -#: company/models.py:107 +#: company/models.py:108 msgid "Phone number" msgstr "Kontakt-Tel." -#: company/models.py:108 +#: company/models.py:109 msgid "Contact phone number" msgstr "Kontakt-Telefon" -#: company/models.py:111 company/templates/company/company_base.html:91 +#: company/models.py:112 company/templates/company/company_base.html:91 msgid "Email" msgstr "Email" -#: company/models.py:111 +#: company/models.py:112 msgid "Contact email address" msgstr "Kontakt-Email" -#: company/models.py:114 company/templates/company/company_base.html:98 +#: company/models.py:115 company/templates/company/company_base.html:98 msgid "Contact" msgstr "Kontakt" -#: company/models.py:115 +#: company/models.py:116 msgid "Point of contact" msgstr "Anlaufstelle" -#: company/models.py:117 +#: company/models.py:118 company/models.py:355 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 msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:129 +#: company/models.py:126 part/models.py:753 +#, fuzzy +#| msgid "Image URL" +msgid "Image" +msgstr "Bild-URL" + +#: company/models.py:131 msgid "is customer" msgstr "ist Kunde" -#: company/models.py:129 +#: company/models.py:131 msgid "Do you sell items to this company?" msgstr "Verkaufen Sie Teile an diese Firma?" -#: company/models.py:131 +#: company/models.py:133 msgid "is supplier" msgstr "ist Zulieferer" -#: company/models.py:131 +#: company/models.py:133 msgid "Do you purchase items from this company?" msgstr "Kaufen Sie Teile von dieser Firma?" -#: company/models.py:133 +#: company/models.py:135 msgid "is manufacturer" msgstr "ist Hersteller" -#: company/models.py:133 +#: company/models.py:135 msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" -#: company/models.py:313 stock/models.py:370 +#: company/models.py:315 stock/models.py:371 #: stock/templates/stock/item_base.html:220 msgid "Base Part" msgstr "Basisteil" -#: company/models.py:317 order/views.py:1372 +#: company/models.py:319 order/views.py:1372 msgid "Select part" msgstr "Teil auswählen" -#: company/models.py:323 company/templates/company/detail.html:60 +#: company/models.py:325 company/templates/company/detail.html:60 #: company/templates/company/supplier_part_base.html:83 -#: company/templates/company/supplier_part_detail.html:25 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 #: order/templates/order/order_base.html:92 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 #: stock/templates/stock/item_base.html:337 templates/js/company.js:48 @@ -1728,81 +1820,85 @@ msgstr "Teil auswählen" msgid "Supplier" msgstr "Zulieferer" -#: company/models.py:324 +#: company/models.py:326 msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:329 company/templates/company/supplier_part_base.html:87 +#: company/models.py:331 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:330 +#: company/models.py:332 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" -#: company/models.py:340 company/templates/company/detail.html:55 +#: company/models.py:342 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:341 +#: company/models.py:343 msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:347 company/templates/company/supplier_part_base.html:99 +#: company/models.py:349 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:348 +#: company/models.py:350 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: company/models.py:353 part/models.py:743 -#: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1555 templates/js/company.js:208 templates/js/part.js:430 -msgid "Link" -msgstr "Link" - -#: company/models.py:354 +#: company/models.py:356 msgid "URL for external supplier part link" msgstr "Teil-URL des Zulieferers" -#: company/models.py:360 +#: company/models.py:362 msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:365 company/templates/company/supplier_part_base.html:113 -#: company/templates/company/supplier_part_detail.html:38 +#: company/models.py:367 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:369 +#: company/models.py:371 +msgid "base cost" +msgstr "" + +#: company/models.py:371 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:371 company/templates/company/supplier_part_base.html:106 -#: stock/models.py:394 stock/templates/stock/item_base.html:295 +#: company/models.py:373 company/templates/company/supplier_part_base.html:106 +#: stock/models.py:395 stock/templates/stock/item_base.html:295 #: templates/js/stock.js:663 msgid "Packaging" msgstr "Verpackungen" -#: company/models.py:371 +#: company/models.py:373 msgid "Part packaging" msgstr "Teile-Verpackungen" -#: company/models.py:373 +#: company/models.py:375 msgid "multiple" msgstr "Vielfache" +#: company/models.py:375 +#, fuzzy +#| msgid "multiple" +msgid "Order multiple" +msgstr "Vielfache" + #: company/templates/company/assigned_stock.html:10 #: company/templates/company/navbar.html:51 #: company/templates/company/navbar.html:54 templates/js/build.js:411 @@ -1847,6 +1943,20 @@ msgstr "Firmendetails" msgid "Phone" msgstr "Telefon" +#: company/templates/company/delete.html:7 +#, fuzzy, python-format +#| msgid "Are you sure you want to delete category" +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "Sind Sie sicher, dass Sie diese Kategorie löschen wollen" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.<br>\n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + #: company/templates/company/detail.html:21 msgid "Company Name" msgstr "Firmenname" @@ -1859,9 +1969,9 @@ msgstr "Keine Website angegeben" msgid "Uses default currency" msgstr "verwendet Standard-Währung" -#: company/templates/company/detail.html:65 -#: order/templates/order/sales_order_base.html:92 stock/models.py:412 -#: stock/models.py:413 stock/templates/stock/item_base.html:247 +#: company/templates/company/detail.html:65 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:413 +#: stock/models.py:414 stock/templates/stock/item_base.html:247 #: templates/js/company.js:40 templates/js/order.js:267 msgid "Customer" msgstr "Kunde" @@ -1872,6 +1982,7 @@ msgid "Supplier Parts" msgstr "Zulieferer-Teile" #: company/templates/company/detail_part.html:20 +#: order/templates/order/order_wizard/select_parts.html:42 #: order/templates/order/purchase_order_detail.html:75 msgid "Create new supplier part" msgstr "Neues Zulieferer-Teil anlegen" @@ -1911,13 +2022,13 @@ msgid "Create new Part" msgstr "Neues Teil hinzufügen" #: company/templates/company/detail_part.html:72 company/views.py:62 -#: order/templates/order/purchase_orders.html:182 +#: order/templates/order/purchase_orders.html:183 #: part/templates/part/supplier.html:50 msgid "New Supplier" msgstr "Neuer Zulieferer" #: company/templates/company/detail_part.html:73 company/views.py:279 -#: order/templates/order/purchase_orders.html:183 +#: order/templates/order/purchase_orders.html:184 msgid "Create new Supplier" msgstr "Neuen Zulieferer anlegen" @@ -2058,7 +2169,7 @@ msgid "New Sales Order" msgstr "Neuer Auftrag" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:379 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:380 #: stock/templates/stock/item_base.html:342 templates/js/company.js:180 msgid "Supplier Part" msgstr "Zulieferer-Teil" @@ -2132,7 +2243,7 @@ msgstr "Hersteller" msgid "Customers" msgstr "Kunden" -#: company/views.py:76 order/templates/order/sales_orders.html:184 +#: company/views.py:76 order/templates/order/sales_orders.html:185 msgid "New Customer" msgstr "Neuer Kunde" @@ -2172,7 +2283,7 @@ msgstr "Firma bearbeiten" msgid "Edited company information" msgstr "Firmeninformation bearbeitet" -#: company/views.py:285 order/templates/order/sales_orders.html:185 +#: company/views.py:285 order/templates/order/sales_orders.html:186 msgid "Create new Customer" msgstr "Neuen Kunden anlegen" @@ -2224,7 +2335,7 @@ msgstr "Label Name" msgid "Label description" msgstr "Label Beschreibung" -#: label/models.py:116 stock/forms.py:201 +#: label/models.py:116 stock/forms.py:202 msgid "Label" msgstr "Label" @@ -2240,6 +2351,12 @@ msgstr "Aktiviert" msgid "Label template is enabled" msgstr "Label-Vorlage ist aktiviert" +#: label/models.py:129 +#, fuzzy +#| msgid "Height [mm]" +msgid "Width [mm]" +msgstr "Höhe [mm]" + #: label/models.py:130 msgid "Label width, specified in mm" msgstr "Label-Breite in mm" @@ -2286,24 +2403,24 @@ msgstr "Teile in diesen Lagerort empfangen" msgid "Purchase Order reference" msgstr "Bestellungs-Referenz" -#: order/forms.py:109 +#: order/forms.py:110 msgid "Target date for order delivery. Order will be overdue after this date." msgstr "Zieldatum für Auftrags-Lieferung." -#: order/forms.py:137 +#: order/forms.py:138 msgid "Enter sales order number" msgstr "Auftrag-Nummer eingeben" -#: order/forms.py:143 order/models.py:448 +#: order/forms.py:145 order/models.py:452 msgid "" "Target date for order completion. Order will be overdue after this date." msgstr "Zieldatum für Auftrags-Fertigstellung." -#: order/forms.py:233 +#: order/forms.py:235 msgid "Enter stock item serial numbers" msgstr "Seriennummern für BestandsObjekt eingeben" -#: order/forms.py:239 +#: order/forms.py:241 msgid "Enter quantity of stock items" msgstr "Menge der BestandsObjekt eingeben" @@ -2319,137 +2436,191 @@ msgstr "Bestellungs-Beschreibung" msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:117 +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "Erstellt von" + +#: order/models.py:118 msgid "User or group responsible for this order" msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind" -#: order/models.py:122 +#: order/models.py:123 msgid "Order notes" msgstr "Bestell-Notizen" -#: order/models.py:181 order/models.py:441 +#: order/models.py:182 order/models.py:445 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:189 +#: order/models.py:191 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:192 +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "Zulieferer-Referenz" + +#: order/models.py:194 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:203 +#: order/models.py:201 +#, fuzzy +#| msgid "Received" +msgid "received by" +msgstr "Empfangen" + +#: order/models.py:206 msgid "Issue Date" msgstr "Aufgabedatum" -#: order/models.py:204 +#: order/models.py:207 msgid "Date order was issued" msgstr "Datum an dem die Bestellung aufgegeben wurde" -#: order/models.py:209 +#: order/models.py:212 msgid "Target Delivery Date" msgstr "Ziel-Versanddatum" -#: order/models.py:210 +#: order/models.py:213 msgid "" "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:216 +#: order/models.py:219 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:240 order/models.py:339 part/views.py:1586 -#: stock/models.py:269 stock/models.py:948 +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:950 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: order/models.py:245 +#: order/models.py:248 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:334 +#: order/models.py:337 msgid "Lines can only be received against an order marked as 'Placed'" msgstr "Nur Teile aufgegebener Bestllungen können empfangen werden" -#: order/models.py:356 +#: order/models.py:359 msgid "Received items" msgstr "Elemente empfangen" -#: order/models.py:437 +#: order/models.py:441 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:443 +#: order/models.py:447 +#, fuzzy +#| msgid "Customer Reference" +msgid "Customer Reference " +msgstr "Kundenreferenz" + +#: order/models.py:447 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:501 +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "Versanddatum" + +#: order/models.py:462 +#, fuzzy +#| msgid "Shipped" +msgid "shipped by" +msgstr "Versendet" + +#: order/models.py:506 msgid "SalesOrder cannot be shipped as it is not currently pending" msgstr "Bestellung kann nicht versendet werden weil er nicht anhängig ist" -#: order/models.py:588 +#: order/models.py:593 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:590 +#: order/models.py:595 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:592 +#: order/models.py:597 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:618 order/templates/order/order_base.html:9 +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "Bestellung" + +#: order/models.py:624 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:309 templates/js/order.js:148 msgid "Purchase Order" msgstr "Bestellung" -#: order/models.py:631 +#: order/models.py:638 msgid "Supplier part" msgstr "Zulieferer-Teil" -#: order/models.py:634 +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:207 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "Empfangen" + +#: order/models.py:641 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:641 stock/models.py:505 +#: order/models.py:648 stock/models.py:506 #: stock/templates/stock/item_base.html:316 msgid "Purchase Price" msgstr "EK-Preis" -#: order/models.py:642 +#: order/models.py:649 msgid "Unit purchase price" msgstr "EK-Preis pro Einheit" -#: order/models.py:736 order/models.py:738 +#: order/models.py:743 order/models.py:745 msgid "Stock item has not been assigned" msgstr "BestandsObjekt wurde nicht zugewiesen" -#: order/models.py:742 +#: order/models.py:749 msgid "Cannot allocate stock item to a line with a different part" msgstr "Kann BestandsObjekt keiner Zeile mit einem anderen Teil hinzufügen" -#: order/models.py:744 +#: order/models.py:751 msgid "Cannot allocate stock to a line without a part" msgstr "Kann BestandsObjekt keiner Zeile ohne Teil hinzufügen" -#: order/models.py:747 +#: order/models.py:754 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:757 +#: order/models.py:764 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für BestandsObjekt mit Seriennummer muss 1 sein" -#: order/models.py:773 +#: order/models.py:769 +msgid "Line" +msgstr "Position" + +#: order/models.py:780 +#, fuzzy +#| msgid "Items" +msgid "Item" +msgstr "Positionen" + +#: order/models.py:781 msgid "Select stock item to allocate" msgstr "BestandsObjekt für Zuordnung auswählen" -#: order/models.py:776 +#: order/models.py:784 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" @@ -2492,28 +2663,32 @@ msgstr "Bestellreferenz" msgid "Order Status" msgstr "Bestellstatus" -#: order/templates/order/order_base.html:98 templates/js/order.js:179 -msgid "Supplier Reference" -msgstr "Zulieferer-Referenz" - #: order/templates/order/order_base.html:117 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "Aufgegeben" -#: order/templates/order/order_base.html:131 -#: order/templates/order/purchase_order_detail.html:207 -#: order/templates/order/receive_parts.html:22 -#: order/templates/order/sales_order_base.html:131 -msgid "Received" -msgstr "Empfangen" - #: order/templates/order/order_cancel.html:7 #: order/templates/order/sales_order_cancel.html:9 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" "Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist." +#: order/templates/order/order_complete.html:7 +#, fuzzy +#| msgid "Mark order as complete" +msgid "Mark this order as complete?" +msgstr "Bestellung als vollständig markieren" + +#: order/templates/order/order_issue.html:7 +#, fuzzy +#| msgid "" +#| "Cancelling this order means that the order will no longer be editable." +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" +"Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist." + #: order/templates/order/order_notes.html:13 msgid "Order Notes" msgstr "Notizen zur Bestellung" @@ -2692,11 +2867,16 @@ msgstr "Auftrags-Positionen" #: order/templates/order/sales_order_detail.html:75 #: order/templates/order/sales_order_detail.html:157 #: report/templates/report/inventree_test_report_base.html:75 -#: stock/models.py:417 stock/templates/stock/item_base.html:234 +#: stock/models.py:418 stock/templates/stock/item_base.html:234 #: templates/js/build.js:418 msgid "Serial Number" msgstr "Seriennummer" +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:338 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "Aktionen" + #: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 #: templates/js/build.js:789 msgid "Edit stock allocation" @@ -2707,8 +2887,18 @@ msgstr "Bestands-Zuordnung bearbeiten" msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" -#: order/templates/order/sales_order_detail.html:229 order/views.py:1351 -#: templates/js/build.js:523 templates/js/build.js:785 +#: order/templates/order/sales_order_detail.html:170 +#, fuzzy +#| msgid "No matching results" +msgid "No matching line items" +msgstr "Keine passenden Ergebnisse gefunden" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 msgid "Allocated" msgstr "Zugeordnet" @@ -2880,6 +3070,12 @@ msgstr "Anzahl kleiner null empfangen" msgid "No lines specified" msgstr "Keine Zeilen angegeben" +#: order/views.py:1060 +#, fuzzy, python-brace-format +#| msgid "Order parts" +msgid "Ordered {n} parts" +msgstr "Teile bestellen" + #: order/views.py:1117 msgid "Supplier part must be specified" msgstr "Zulieferer-Teil muss ausgewählt werden" @@ -2905,8 +3101,10 @@ msgid "Allocate Serial Numbers" msgstr "Seriennummern zuweisen" #: order/views.py:1351 -msgid "items" -msgstr "Teile" +#, fuzzy, python-brace-format +#| msgid "Allocated to Orders" +msgid "Allocated {n} items" +msgstr "zu Bauaufträgen zugeordnet" #: order/views.py:1367 msgid "Select line item" @@ -2936,7 +3134,7 @@ msgstr "Zuordnung bearbeiten" msgid "Remove allocation" msgstr "Zuordnung entfernen" -#: part/bom.py:138 part/models.py:72 part/models.py:761 +#: part/bom.py:138 part/models.py:72 part/models.py:762 #: part/templates/part/category.html:62 part/templates/part/detail.html:90 msgid "Default Location" msgstr "Standard-Lagerort" @@ -2958,11 +3156,11 @@ msgstr "Fehler beim Lesen der Stückliste (ungültige Daten)" msgid "Error reading BOM file (incorrect row size)" msgstr "Fehler beim Lesen der Stückliste (ungültige Zeilengröße)" -#: part/forms.py:89 stock/forms.py:264 +#: part/forms.py:89 stock/forms.py:265 msgid "File Format" msgstr "Dateiformat" -#: part/forms.py:89 stock/forms.py:264 +#: part/forms.py:89 stock/forms.py:265 msgid "Select output file format" msgstr "Ausgabe-Dateiformat auswählen" @@ -3007,7 +3205,7 @@ msgstr "Zulieferer einschließen" msgid "Include part supplier data in exported BOM" msgstr "Zulieferer-Daten in Stückliste-Export einschließen" -#: part/forms.py:120 part/models.py:2054 +#: part/forms.py:120 part/models.py:2057 msgid "Parent Part" msgstr "Ausgangsteil" @@ -3019,63 +3217,81 @@ msgstr "Teil für Stücklisten-Kopie auswählen" msgid "Clear existing BOM items" msgstr "Stücklisten-Position(en) löschen" -#: part/forms.py:132 +#: part/forms.py:133 msgid "Confirm BOM duplication" msgstr "Kopie von Stückliste bestätigen" -#: part/forms.py:150 +#: part/forms.py:151 +#, fuzzy +#| msgid "Validate BOM" +msgid "validate" +msgstr "BOM validieren" + +#: part/forms.py:151 msgid "Confirm that the BOM is correct" msgstr "Bestätigen, dass die Stückliste korrekt ist" -#: part/forms.py:162 +#: part/forms.py:163 +#, fuzzy +#| msgid "BOM Item" +msgid "BOM file" +msgstr "Stücklisten-Position" + +#: part/forms.py:163 msgid "Select BOM file to upload" msgstr "Stücklisten-Datei zum Upload auswählen" -#: part/forms.py:181 +#: part/forms.py:182 msgid "Related Part" msgstr "verknüpftes Teil" -#: part/forms.py:200 +#: part/forms.py:201 msgid "Select part category" msgstr "Teilekategorie wählen" -#: part/forms.py:217 +#: part/forms.py:218 msgid "Duplicate all BOM data for this part" msgstr "Stückliste für dieses Teil kopieren" -#: part/forms.py:218 +#: part/forms.py:219 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/forms.py:223 +#: part/forms.py:224 msgid "Duplicate all parameter data for this part" msgstr "Alle Parameter-Daten für dieses Teil kopieren" -#: part/forms.py:224 +#: part/forms.py:225 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: part/forms.py:229 +#: part/forms.py:230 msgid "Confirm part creation" msgstr "Erstellen des Teils bestätigen" -#: part/forms.py:234 +#: part/forms.py:235 msgid "Include category parameter templates" msgstr "Kategorie Parameter-Vorlage einschließen" -#: part/forms.py:239 +#: part/forms.py:240 msgid "Include parent categories parameter templates" msgstr "Über-Kategorie Parameter-Vorlage einschließen" -#: part/forms.py:319 +#: part/forms.py:320 msgid "Add parameter template to same level categories" msgstr "Parameter-Vorlage zu Kategorien dieser Ebene hinzufügen" -#: part/forms.py:323 +#: part/forms.py:324 msgid "Add parameter template to all categories" msgstr "Parameter-Vorlage zu allen Kategorien hinzufügen" -#: part/forms.py:368 +#: part/forms.py:342 part/models.py:2151 +#, fuzzy +#| msgid "Buy parts" +msgid "Sub part" +msgstr "Teile kaufen" + +#: part/forms.py:370 msgid "Input quantity for price calculation" msgstr "Eintragsmenge zur Preisberechnung" @@ -3091,7 +3307,7 @@ msgstr "Standard Stichwörter" msgid "Default keywords for parts in this category" msgstr "Standard-Stichworte für Teile dieser Kategorie" -#: part/models.py:82 part/models.py:2099 +#: part/models.py:82 part/models.py:2103 #: part/templates/part/part_app_base.html:9 msgid "Part Category" msgstr "Teilkategorie" @@ -3161,7 +3377,7 @@ msgstr "Schlüsselwörter" msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:724 part/templates/part/detail.html:73 +#: part/models.py:724 part/models.py:2102 part/templates/part/detail.html:73 #: part/templates/part/set_category.html:15 templates/js/part.js:384 msgid "Category" msgstr "Kategorie" @@ -3188,246 +3404,273 @@ msgstr "Revisions- oder Versionsnummer" msgid "Revision" msgstr "Revision" -#: part/models.py:759 +#: part/models.py:760 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:806 part/templates/part/detail.html:97 +#: part/models.py:807 part/templates/part/detail.html:97 msgid "Default Supplier" msgstr "Standard Zulieferer" -#: part/models.py:807 +#: part/models.py:808 msgid "Default supplier part" msgstr "Standard Zulieferer-Teil" -#: part/models.py:814 +#: part/models.py:815 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:815 +#: part/models.py:816 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Lagerbestand dieses Teils" -#: part/models.py:820 part/templates/part/detail.html:113 +#: part/models.py:821 part/templates/part/detail.html:113 msgid "Minimum Stock" msgstr "Minimaler Lagerbestand" -#: part/models.py:821 +#: part/models.py:822 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Lagerbestand" -#: part/models.py:827 part/templates/part/detail.html:106 +#: part/models.py:828 part/models.py:2031 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "Einheiten" -#: part/models.py:828 +#: part/models.py:829 msgid "Stock keeping units for this part" msgstr "Stock Keeping Units (SKU) für dieses Teil" -#: part/models.py:834 +#: part/models.py:835 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:840 +#: part/models.py:841 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bau von anderen genutzt werden?" -#: part/models.py:846 +#: part/models.py:847 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:851 +#: part/models.py:852 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:856 +#: part/models.py:857 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:860 part/templates/part/detail.html:227 +#: part/models.py:861 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 #: templates/js/table_filters.js:214 templates/js/table_filters.js:283 msgid "Active" msgstr "Aktiv" -#: part/models.py:861 +#: part/models.py:862 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:866 +#: part/models.py:867 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ist dieses Teil virtuell, wie zum Beispiel eine Software oder Lizenz?" -#: part/models.py:871 +#: part/models.py:872 msgid "Part notes - supports Markdown formatting" msgstr "Bemerkungen - unterstüzt Markdown-Formatierung" -#: part/models.py:874 +#: part/models.py:875 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:874 +#: part/models.py:875 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:877 +#: part/models.py:878 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:879 +#: part/models.py:880 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:881 part/templates/part/detail.html:126 -#: templates/js/order.js:293 -msgid "Creation Date" -msgstr "Erstelldatum" - -#: part/models.py:883 +#: part/models.py:884 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1927 +#: part/models.py:1929 msgid "Test templates can only be created for trackable parts" msgstr "Test-Vorlagen können nur für verfolgbare Teile angelegt werden" -#: part/models.py:1944 +#: part/models.py:1946 msgid "Test with this name already exists for this part" msgstr "Ein Test mit diesem Namen besteht bereits für dieses Teil" -#: part/models.py:1963 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1966 templates/js/part.js:561 templates/js/stock.js:104 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:1964 +#: part/models.py:1967 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:1969 +#: part/models.py:1972 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:1970 +#: part/models.py:1973 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:1975 templates/js/part.js:570 +#: part/models.py:1978 templates/js/part.js:570 #: templates/js/table_filters.js:200 msgid "Required" msgstr "benötigt" -#: part/models.py:1976 +#: part/models.py:1979 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:1981 templates/js/part.js:578 +#: part/models.py:1984 templates/js/part.js:578 msgid "Requires Value" msgstr "verpflichtender Wert" -#: part/models.py:1982 +#: part/models.py:1985 msgid "Does this test require a value when adding a test result?" msgstr "" "Muss für diesen Test ein Wert für das Test-Ergebnis eingetragen werden?" -#: part/models.py:1987 templates/js/part.js:585 +#: part/models.py:1990 templates/js/part.js:585 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:1988 +#: part/models.py:1991 msgid "Does this test require a file attachment when adding a test result?" msgstr "" "Muss für diesen Test ein Anhang für das Test-Ergebnis hinzugefügt werden?" -#: part/models.py:2021 +#: part/models.py:2024 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:2026 +#: part/models.py:2029 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:2028 +#: part/models.py:2031 msgid "Parameter Units" msgstr "Parameter Einheit" -#: part/models.py:2056 part/models.py:2104 +#: part/models.py:2059 part/models.py:2108 part/models.py:2109 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:2058 +#: part/models.py:2061 msgid "Data" msgstr "Wert" -#: part/models.py:2058 +#: part/models.py:2061 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:2108 +#: part/models.py:2113 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "Standard-Wert" + +#: part/models.py:2114 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:2136 +#: part/models.py:2143 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:2144 +#: part/models.py:2152 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:2150 +#: part/models.py:2158 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:2152 +#: part/models.py:2160 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "Optional" + +#: part/models.py:2160 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:2155 +#: part/models.py:2163 +#, fuzzy +#| msgid "Overdue" +msgid "Overage" +msgstr "Überfällig" + +#: part/models.py:2164 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:2158 +#: part/models.py:2167 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:2161 +#: part/models.py:2170 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:2163 +#: part/models.py:2172 +#, fuzzy +#| msgid "BOM checksum" +msgid "Checksum" +msgstr "Prüfsumme der Stückliste" + +#: part/models.py:2172 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:2167 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2176 templates/js/bom.js:275 templates/js/bom.js:282 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "Geerbt" -#: part/models.py:2168 +#: part/models.py:2177 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" "Diese Stücklisten-Position wird in dei Stücklisten von Teil-Varianten vererbt" -#: part/models.py:2244 part/views.py:1592 part/views.py:1644 -#: stock/models.py:259 +#: part/models.py:2253 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:2253 part/models.py:2255 +#: part/models.py:2262 part/models.py:2264 msgid "Sub part must be specified" msgstr "Zulieferer-Teil muss festgelegt sein" -#: part/models.py:2258 +#: part/models.py:2267 msgid "BOM Item" msgstr "Stücklisten-Position" -#: part/models.py:2379 +#: part/models.py:2384 +#, fuzzy +#| msgid "Part" +msgid "Part 1" +msgstr "Teil" + +#: part/models.py:2388 +#, fuzzy +#| msgid "Part" +msgid "Part 2" +msgstr "Teil" + +#: part/models.py:2388 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:2411 +#: part/models.py:2420 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3439,23 +3682,6 @@ msgstr "" msgid "Part Stock Allocations" msgstr "Teil-Bestandszuordnungen" -#: part/templates/part/allocation.html:17 -#: part/templates/part/allocation.html:45 -msgid "Order" -msgstr "Bestellung" - -#: part/templates/part/allocation.html:18 -#: part/templates/part/allocation.html:24 -#: part/templates/part/allocation.html:31 -#: part/templates/part/allocation.html:49 -#: stock/templates/stock/item_base.html:8 -#: 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 -msgid "Stock Item" -msgstr "BestandsObjekt" - #: part/templates/part/attachments.html:10 msgid "Part Attachments" msgstr "Anhänge" @@ -3475,6 +3701,23 @@ msgstr "" msgid "Bill of Materials" msgstr "Stückliste" +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for <i>%(part)s</i> has changed, and must be validated.<br>" +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for <i>%(part)s</i> was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, fuzzy, python-format +#| msgid "This line has been validated" +msgid "The BOM for <i>%(part)s</i> has not been validated." +msgstr "Diese Position wurde validiert" + #: part/templates/part/bom.html:32 msgid "Remove selected BOM items" msgstr "Ausgewählte Stücklistenpositionen entfernen" @@ -3614,6 +3857,22 @@ msgstr "Vorlage für Stückliste" msgid "Each part must already exist in the database" msgstr "Jedes Teil muss bereits in der Datenbank bestehen" +#: part/templates/part/bom_upload/upload_file.html:27 +#, fuzzy +#| msgid "Uploaded" +msgid "Upload File" +msgstr "Hochgeladen" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:<br><i>%(part)s</i>" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + #: part/templates/part/build.html:10 msgid "Part Builds" msgstr "gefertigte Teile" @@ -3691,7 +3950,7 @@ msgstr "Teil-Kategorie anlegen" msgid "Create new Part Category" msgstr "Neue Teil-Kategorie anlegen" -#: part/templates/part/category.html:240 stock/views.py:1358 +#: part/templates/part/category.html:240 stock/views.py:1359 msgid "Create new Stock Location" msgstr "Neuen Lagerort erstellen" @@ -3790,10 +4049,6 @@ msgstr "Keine Seriennummern gefunden" msgid "Stock Expiry Time" msgstr "Bestands-Ablauf Zeit" -#: part/templates/part/detail.html:132 -msgid "Created By" -msgstr "Erstellt von" - #: part/templates/part/detail.html:139 msgid "Responsible User" msgstr "Verantwortlicher Benutzer" @@ -3915,7 +4170,7 @@ msgstr "Neuer Parameter" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1650 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1652 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "Wert" @@ -3925,7 +4180,7 @@ msgid "Edit" msgstr "Bearbeiten" #: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 users/models.py:175 +#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:175 msgid "Delete" msgstr "Löschen" @@ -4419,18 +4674,30 @@ msgid "Sales order query filters" msgstr "Auftrags-Abfragefilter" #: report/models.py:500 +#, fuzzy +#| msgid "Shipped" +msgid "Snippet" +msgstr "Versendet" + +#: report/models.py:501 msgid "Report snippet file" msgstr "Berichts-Snippet" -#: report/models.py:504 +#: report/models.py:505 msgid "Snippet file description" msgstr "Snippet-Beschreibung" -#: report/models.py:539 +#: report/models.py:540 +#, fuzzy +#| msgid "Assembly" +msgid "Asset" +msgstr "Baugruppe" + +#: report/models.py:541 msgid "Report asset file" msgstr "Berichts-Ressource" -#: report/models.py:542 +#: report/models.py:544 msgid "Asset file description" msgstr "Ressource-Beschreibung" @@ -4452,12 +4719,12 @@ msgid "Test Results" msgstr "Testergebnisse" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1638 +#: stock/models.py:1640 msgid "Test" msgstr "Test" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1644 +#: stock/models.py:1646 msgid "Result" msgstr "Ergebnis" @@ -4474,304 +4741,360 @@ msgstr "bestanden" msgid "Fail" msgstr "fehlgeschlagen" -#: stock/forms.py:117 +#: stock/api.py:199 +#, fuzzy, python-brace-format +#| msgid "Counted stock for {n} items" +msgid "Updated stock for {n} items" +msgstr "Bestand für {n} Objekte erfasst" + +#: stock/api.py:268 +#, fuzzy, python-brace-format +#| msgid "Moved {n} items to {dest}" +msgid "Moved {n} parts to {loc}" +msgstr "{n} Teile nach {dest} 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 +msgid "Expiry Date" +msgstr "Ablaufdatum" + +#: stock/forms.py:115 stock/forms.py:407 +#, fuzzy +#| msgid "Batch code for this stock item" +msgid "Expiration date for this stock item" +msgstr "Losnummer für dieses BestandsObjekt" + +#: stock/forms.py:118 msgid "Enter unique serial numbers (or leave blank)" msgstr "Eindeutige Seriennummern eingeben (oder leer lassen)" -#: stock/forms.py:202 stock/forms.py:258 -msgid "Select test report template" -msgstr "Test Bericht Vorlage auswählen" +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" +msgstr "" -#: stock/forms.py:266 -msgid "Include stock items in sub locations" -msgstr "BestandsObjekt in untergeordneten Lagerorten einschließen" +#: stock/forms.py:171 +msgid "Serial numbers" +msgstr "Seriennummern" -#: stock/forms.py:301 -msgid "Stock item to install" -msgstr "BestandsObjekt zum verbauen" +#: stock/forms.py:171 +#, fuzzy +#| msgid "Number of unique serial number ({s}) must match quantity ({q})" +msgid "Unique serial numbers (must match quantity)" +msgstr "" +"Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) " +"übereinstimmen" -#: stock/forms.py:308 -msgid "Stock quantity to assign" -msgstr "Bestandmenge zum Zuweisen" - -#: stock/forms.py:336 -msgid "Must not exceed available quantity" -msgstr "Anzahl darf die verfügbare Anzahl nicht überschreiten" - -#: stock/forms.py:346 -msgid "Destination location for uninstalled items" -msgstr "Ziel Lagerort für unverbaute Objekte" - -#: stock/forms.py:348 +#: stock/forms.py:173 stock/forms.py:349 msgid "Add transaction note (optional)" msgstr "hinzufügen Transaktionsnotizen (optional)" -#: stock/forms.py:350 +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "Test Bericht Vorlage auswählen" + +#: stock/forms.py:267 templates/js/table_filters.js:111 +msgid "Include sublocations" +msgstr "Unter-Lagerorte einschließen" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "BestandsObjekt in untergeordneten Lagerorten einschließen" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "BestandsObjekt zum verbauen" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "Bestandmenge zum Zuweisen" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "Anzahl darf die verfügbare Anzahl nicht überschreiten" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "Ziel Lagerort für unverbaute Objekte" + +#: stock/forms.py:351 msgid "Confirm uninstall" msgstr "nicht mehr verbauen bestätigen" -#: stock/forms.py:350 +#: stock/forms.py:351 msgid "Confirm removal of installed stock items" msgstr "Entfernen der verbauten BestandsObjekt bestätigen" -#: stock/forms.py:374 +#: stock/forms.py:375 msgid "Destination stock location" msgstr "Ziel-Lagerbestand" -#: stock/forms.py:376 +#: stock/forms.py:377 msgid "Add note (required)" msgstr "Notiz hinzufügen (erforderlich)" -#: stock/forms.py:380 stock/views.py:852 stock/views.py:1050 +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 msgid "Confirm stock adjustment" msgstr "Bestands-Anpassung bestätigen" -#: stock/forms.py:380 +#: stock/forms.py:381 msgid "Confirm movement of stock items" msgstr "Verschieben der BestandsObjekt bestätigen" -#: stock/forms.py:382 +#: stock/forms.py:383 msgid "Set Default Location" msgstr "Standard-Lagerort ändern" -#: stock/forms.py:382 +#: stock/forms.py:383 msgid "Set the destination as the default location for selected parts" msgstr "Setze das Ziel als Standard-Lagerort für ausgewählte Teile" -#: stock/models.py:204 +#: stock/models.py:54 stock/models.py:511 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:512 +#, fuzzy +#| msgid "Select filter" +msgid "Select Owner" +msgstr "Filter auswählen" + +#: stock/models.py:205 msgid "Created stock item" msgstr "Neues BestandsObjekt erstellt" -#: stock/models.py:240 +#: stock/models.py:241 msgid "StockItem with this serial number already exists" msgstr "Ein BestandsObjekt mit dieser Seriennummer existiert bereits" -#: stock/models.py:276 +#: stock/models.py:277 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "Teile-Typ ('{pf}') muss {pe} sein" -#: stock/models.py:286 stock/models.py:295 +#: stock/models.py:287 stock/models.py:296 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:287 +#: stock/models.py:288 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" "Seriennummer kann nicht gesetzt werden wenn die Anzahl größer als 1 ist" -#: stock/models.py:309 +#: stock/models.py:310 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:315 +#: stock/models.py:316 msgid "Item must have a build reference if is_building=True" msgstr "Teil muss eine Referenz haben wenn is_building wahr ist" -#: stock/models.py:322 +#: stock/models.py:323 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:362 +#: stock/models.py:363 msgid "Parent Stock Item" msgstr "Eltern-BestandsObjekt" -#: stock/models.py:371 +#: stock/models.py:372 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:380 +#: stock/models.py:381 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zulieferer-Teil für dieses BestandsObjekt auswählen" -#: stock/models.py:385 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:386 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:388 +#: stock/models.py:389 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:395 +#: stock/models.py:396 msgid "Packaging this stock item is stored in" msgstr "Die Verpackung dieses BestandsObjekt ist gelagert in" -#: stock/models.py:400 stock/templates/stock/item_base.html:255 +#: stock/models.py:401 stock/templates/stock/item_base.html:255 msgid "Installed In" msgstr "verbaut in" -#: stock/models.py:403 +#: stock/models.py:404 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:419 +#: stock/models.py:420 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:431 +#: stock/models.py:432 msgid "Batch code for this stock item" msgstr "Losnummer für dieses BestandsObjekt" -#: stock/models.py:435 +#: stock/models.py:436 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:444 +#: stock/models.py:445 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:446 +#: stock/models.py:447 msgid "Build for this stock item" msgstr "Bau für dieses BestandsObjekt" -#: stock/models.py:457 +#: stock/models.py:458 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:460 +#: stock/models.py:461 msgid "Purchase order for this stock item" msgstr "Bestellung für dieses BestandsObjekt" -#: stock/models.py:466 +#: stock/models.py:467 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:472 stock/templates/stock/item_base.html:349 -#: templates/js/stock.js:652 -msgid "Expiry Date" -msgstr "Ablaufdatum" - -#: stock/models.py:473 +#: stock/models.py:474 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" "Ablaufdatum für BestandsObjekt. Bestand wird danach als abgelaufen " "gekennzeichnet" -#: stock/models.py:486 +#: stock/models.py:487 +#, fuzzy +#| msgid "Delete Template" +msgid "Delete on deplete" +msgstr "Vorlage löschen" + +#: stock/models.py:487 msgid "Delete this Stock Item when stock is depleted" msgstr "Dieses BestandsObjekt löschen wenn Bestand aufgebraucht" -#: stock/models.py:496 stock/templates/stock/item_notes.html:13 +#: stock/models.py:497 stock/templates/stock/item_notes.html:13 #: stock/templates/stock/navbar.html:54 msgid "Stock Item Notes" msgstr "BestandsObjekt-Notizen" -#: stock/models.py:506 +#: stock/models.py:507 msgid "Single unit purchase price at time of purchase" msgstr "EK-Preis für eine Einheit bei EK-Datum" -#: stock/models.py:610 +#: stock/models.py:612 msgid "Assigned to Customer" msgstr "zugewiesen zum Kunden" -#: stock/models.py:612 +#: stock/models.py:614 msgid "Manually assigned to customer" msgstr "manuell zugewiesen zum Kunden" -#: stock/models.py:625 +#: stock/models.py:627 msgid "Returned from customer" msgstr "zurück vom Kunden" -#: stock/models.py:627 +#: stock/models.py:629 msgid "Returned to location" msgstr "zurück ins Lager" -#: stock/models.py:787 +#: stock/models.py:789 msgid "Installed into stock item" msgstr "In BestandsObjekt verbaut" -#: stock/models.py:795 +#: stock/models.py:797 msgid "Installed stock item" msgstr "verbautes BestandsObjekt" -#: stock/models.py:819 +#: stock/models.py:821 msgid "Uninstalled stock item" msgstr "BestandsObjekt ausgebaut" -#: stock/models.py:838 +#: stock/models.py:840 msgid "Uninstalled into location" msgstr "ausgebaut nach Lagerort" -#: stock/models.py:939 +#: stock/models.py:941 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:945 +#: stock/models.py:947 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:951 +#: stock/models.py:953 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "Anzahl darf nicht die verfügbare Anzahl überschreiten ({n})" -#: stock/models.py:954 +#: stock/models.py:956 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:957 +#: stock/models.py:959 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:989 +#: stock/models.py:991 msgid "Add serial number" msgstr "Seriennummer hinzufügen" -#: stock/models.py:992 +#: stock/models.py:994 #, python-brace-format msgid "Serialized {n} items" msgstr "{n} Teile serialisiert" -#: stock/models.py:1070 +#: stock/models.py:1072 msgid "Split from existing stock" msgstr "aufteilen vom vorhandenen Bestand" -#: stock/models.py:1108 +#: stock/models.py:1110 msgid "StockItem cannot be moved as it is not in stock" msgstr "BestandsObjekt kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:1551 +#: stock/models.py:1553 msgid "Title" msgstr "Titel" -#: stock/models.py:1551 +#: stock/models.py:1553 msgid "Tracking entry title" msgstr "Objektverfolgung - Name des Eintrags" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:1555 +#: stock/models.py:1557 msgid "Link to external page for further information" msgstr "Link auf externe Seite für weitere Informationen" -#: stock/models.py:1615 +#: stock/models.py:1617 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:1621 +#: stock/models.py:1623 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:1639 +#: stock/models.py:1641 msgid "Test name" msgstr "Name des Tests" -#: stock/models.py:1645 templates/js/table_filters.js:190 +#: stock/models.py:1647 templates/js/table_filters.js:190 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:1651 +#: stock/models.py:1653 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:1658 +#: stock/models.py:1660 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:1664 +#: stock/models.py:1666 msgid "Test notes" msgstr "Test Notizen" @@ -4941,11 +5264,6 @@ msgstr "Kein Lagerort gesetzt" msgid "Barcode Identifier" msgstr "Barcode-Bezeichner" -#: stock/templates/stock/item_base.html:302 templates/InvenTree/search.html:167 -#: templates/js/build.js:655 templates/navbar.html:29 -msgid "Build" -msgstr "Bauauftrag" - #: stock/templates/stock/item_base.html:323 msgid "Parent Item" msgstr "Elternposition" @@ -5129,7 +5447,7 @@ msgstr "Lade..." msgid "The following stock items will be uninstalled" msgstr "Die folgenden BestandsObjekte werden nicht mehr verbaut" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1331 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 msgid "Convert Stock Item" msgstr "BestandsObjekt umwandeln" @@ -5149,8 +5467,8 @@ msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" msgid "Edit Stock Location" msgstr "BestandsObjekt-Lagerort bearbeiten" -#: stock/views.py:230 stock/views.py:1321 stock/views.py:1432 -#: stock/views.py:1797 +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 msgid "Owner is required (ownership control is enabled)" msgstr "Eigentümer notwendig (Eigentümerkontrolle aktiv)" @@ -5238,95 +5556,123 @@ msgstr "Lagerbestand anpassen" msgid "Move Stock Items" msgstr "BestandsObjekte bewegen" +#: stock/views.py:998 +msgid "Move" +msgstr "" + #: stock/views.py:999 msgid "Count Stock Items" msgstr "BestandsObjekte zählen" +#: stock/views.py:999 +#, fuzzy +#| msgid "Account" +msgid "Count" +msgstr "Konto" + #: stock/views.py:1000 msgid "Remove From Stock" msgstr "Aus Lagerbestand entfernen" +#: stock/views.py:1000 +msgid "Take" +msgstr "" + #: stock/views.py:1001 msgid "Add Stock Items" msgstr "BestandsObjekte hinzufügen" +#: stock/views.py:1001 users/models.py:171 +msgid "Add" +msgstr "Hinzufügen" + #: stock/views.py:1002 msgid "Delete Stock Items" msgstr "BestandsObjekte löschen" -#: stock/views.py:1030 +#: stock/views.py:1031 msgid "Must enter integer value" msgstr "Nur Ganzzahl eingeben" -#: stock/views.py:1035 +#: stock/views.py:1036 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: stock/views.py:1042 +#: stock/views.py:1043 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "Anzahl darf {x} nicht überschreiten" -#: stock/views.py:1106 +#: stock/views.py:1107 msgid "No action performed" msgstr "Keine Aktion durchgeführt" -#: stock/views.py:1149 +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "Vorrat zu {n} BestandsObjekten hinzugefügt" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "Vorrat von {n} BestandsObjekten entfernt" + +#: stock/views.py:1150 #, python-brace-format msgid "Counted stock for {n} items" msgstr "Bestand für {n} Objekte erfasst" -#: stock/views.py:1189 +#: stock/views.py:1190 msgid "No items were moved" msgstr "Keine BestandsObjekt wurden bewegt" -#: stock/views.py:1192 +#: stock/views.py:1193 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "{n} Teile nach {dest} bewegt" -#: stock/views.py:1211 +#: stock/views.py:1212 #, python-brace-format msgid "Deleted {n} stock items" msgstr "{n} BestandsObjekte gelöscht" -#: stock/views.py:1223 +#: stock/views.py:1224 msgid "Edit Stock Item" msgstr "BestandsObjekt bearbeiten" -#: stock/views.py:1449 +#: stock/views.py:1450 msgid "Serialize Stock" msgstr "Lagerbestand erfassen" -#: stock/views.py:1542 templates/js/build.js:210 +#: stock/views.py:1543 templates/js/build.js:210 msgid "Create new Stock Item" msgstr "Neues BestandsObjekt hinzufügen" -#: stock/views.py:1684 +#: stock/views.py:1685 msgid "Duplicate Stock Item" msgstr "Bestand duplizieren" -#: stock/views.py:1766 +#: stock/views.py:1767 msgid "Quantity cannot be negative" msgstr "Anzahl kann nicht negativ sein" -#: stock/views.py:1866 +#: stock/views.py:1867 msgid "Delete Stock Location" msgstr "Bestand-Lagerort löschen" -#: stock/views.py:1879 +#: stock/views.py:1880 msgid "Delete Stock Item" msgstr "BestandsObjekt löschen" -#: stock/views.py:1890 +#: stock/views.py:1891 msgid "Delete Stock Tracking Entry" msgstr "Lagerbestands-Tracking-Eintrag löschen" -#: stock/views.py:1897 +#: stock/views.py:1898 msgid "Edit Stock Tracking Entry" msgstr "Lagerbestands-Tracking-Eintrag bearbeiten" -#: stock/views.py:1906 +#: stock/views.py:1907 msgid "Add Stock Tracking Entry" msgstr "Lagerbestands-Tracking-Eintrag hinzufügen" @@ -5430,10 +5776,6 @@ msgstr "Kategorie-Parametervorlagen" msgid "No category parameter templates found" msgstr "Keine Kategorie-Parametervorlagen gefunden" -#: templates/InvenTree/settings/category.html:67 -msgid "Default Value" -msgstr "Standard-Wert" - #: templates/InvenTree/settings/category.html:70 #: templates/InvenTree/settings/part.html:81 msgid "Edit Template" @@ -5749,10 +6091,6 @@ msgstr "Barcode entspricht keinem Lagerort" msgid "Open subassembly" msgstr "Unterbaugruppe öffnen" -#: templates/js/bom.js:216 templates/js/bom.js:269 -msgid "Optional" -msgstr "Optional" - #: templates/js/bom.js:261 msgid "No pricing available" msgstr "Keine Preisinformation verfügbar" @@ -5761,10 +6099,6 @@ msgstr "Keine Preisinformation verfügbar" msgid "View BOM" msgstr "Stückliste anzeigen" -#: templates/js/bom.js:338 templates/js/build.js:571 templates/js/build.js:984 -msgid "Actions" -msgstr "Aktionen" - #: templates/js/bom.js:346 msgid "Validate BOM Item" msgstr "Stücklisten-Position validieren" @@ -6026,10 +6360,6 @@ msgstr "Bestellung überfällig" msgid "No sales orders found" msgstr "Keine Aufträge gefunden" -#: templates/js/order.js:303 -msgid "Shipment Date" -msgstr "Versanddatum" - #: templates/js/part.js:51 templates/js/part.js:136 msgid "Trackable part" msgstr "nachverfolgbares Teil" @@ -6349,10 +6679,6 @@ msgstr "Ist zugeordnet" msgid "Item has been allocated" msgstr "Teil wurde zugeordnet" -#: templates/js/table_filters.js:111 -msgid "Include sublocations" -msgstr "Unter-Lagerorte einschließen" - #: templates/js/table_filters.js:112 msgid "Include stock in sublocations" msgstr "Bestand in Unter-Lagerorten einschließen" @@ -6550,10 +6876,6 @@ msgstr "Benutzername eingeben" msgid "Password" msgstr "Passwort" -#: templates/registration/login.html:76 -msgid "Enter password" -msgstr "Passwort eingeben" - #: templates/registration/login.html:83 msgid "Username / password combination is incorrect" msgstr "Benutzername / Passwort Kombination ist falsch" @@ -6690,10 +7012,6 @@ msgstr "Ansicht" msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:171 -msgid "Add" -msgstr "Hinzufügen" - #: users/models.py:171 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" @@ -6710,6 +7028,9 @@ msgstr "Berechtigungen Einträge zu ändern" msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" +#~ msgid "items" +#~ msgstr "Teile" + #~ msgid "Create purchase order" #~ msgstr "Neue Bestellung anlegen" @@ -6721,9 +7042,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Show QR code" #~ msgstr "QR-Code anzeigen" -#~ msgid "Serial numbers" -#~ msgstr "Seriennummern" - #~ msgid "name" #~ msgstr "Name" @@ -6798,9 +7116,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Default_location" #~ msgstr "Standard-Lagerort" -#~ msgid "Buy parts" -#~ msgstr "Teile kaufen" - #~ msgid "Build parts" #~ msgstr "Bauteile" @@ -6896,17 +7211,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Finished" #~ msgstr "Bearbeitung beenden" -#, fuzzy -#~| msgid "Validate BOM" -#~ msgid "Validate" -#~ msgstr "BOM validieren" - -#~ msgid "Added stock to {n} items" -#~ msgstr "Vorrat zu {n} BestandsObjekten hinzugefügt" - -#~ msgid "Removed stock from {n} items" -#~ msgstr "Vorrat von {n} BestandsObjekten entfernt" - #, fuzzy #~| msgid "Confirm stock adjustment" #~ msgid "Document actions" @@ -7201,6 +7505,3 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Allocate" #~ msgstr "zuweisen" - -#~ msgid "Line" -#~ msgstr "Position" diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po index 7fe67bf929..bb954c049d 100644 --- a/InvenTree/locale/en/LC_MESSAGES/django.po +++ b/InvenTree/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-03 02:10+0000\n" +"POT-Creation-Date: 2021-04-04 20:22+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" @@ -34,32 +34,47 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:187 +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:132 msgid "Confirm" msgstr "" #: InvenTree/forms.py:126 +msgid "Confirm delete" +msgstr "" + +#: InvenTree/forms.py:127 msgid "Confirm item deletion" msgstr "" -#: InvenTree/forms.py:158 +#: InvenTree/forms.py:159 templates/registration/login.html:76 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:160 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:165 +#: InvenTree/forms.py:167 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:168 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:200 +#: InvenTree/forms.py:203 msgid "Apply Theme" msgstr "" -#: InvenTree/forms.py:230 +#: InvenTree/forms.py:233 msgid "Select Category" msgstr "" -#: InvenTree/helpers.py:361 order/models.py:242 order/models.py:341 -#: stock/views.py:1762 +#: InvenTree/helpers.py:361 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 msgid "Invalid quantity provided" msgstr "" @@ -91,7 +106,7 @@ msgstr "" msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/models.py:59 stock/models.py:1657 +#: InvenTree/models.py:59 stock/models.py:1659 msgid "Attachment" msgstr "" @@ -107,7 +122,7 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:68 InvenTree/models.py:69 +#: 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 msgid "User" @@ -118,20 +133,21 @@ msgid "upload date" msgstr "" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 -#: part/models.py:686 part/templates/part/params.html:27 report/models.py:179 -#: templates/InvenTree/search.html:136 templates/InvenTree/search.html:273 -#: templates/js/part.js:109 +#: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:136 +#: templates/InvenTree/search.html:273 templates/js/part.js:109 msgid "Name" msgstr "" #: InvenTree/models.py:114 build/models.py:134 -#: build/templates/build/detail.html:21 company/models.py:359 +#: build/templates/build/detail.html:21 company/models.py:361 #: 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 -#: order/templates/order/purchase_order_detail.html:168 part/models.py:710 -#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 -#: report/models.py:192 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 #: report/templates/report/inventree_build_order_base.html:118 #: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 #: templates/InvenTree/search.html:280 @@ -246,7 +262,8 @@ msgid "Invalid character in part name" msgstr "" #: InvenTree/validators.py:63 -msgid "IPN must match regex pattern" +#, python-brace-format +msgid "IPN must match regex pattern {pat}" msgstr "" #: InvenTree/validators.py:77 InvenTree/validators.py:91 @@ -344,7 +361,7 @@ msgid "Order target date" msgstr "" #: build/forms.py:39 build/templates/build/build_base.html:104 -#: build/templates/build/detail.html:121 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 #: order/templates/order/order_base.html:124 #: order/templates/order/sales_order_base.html:117 #: report/templates/report/inventree_build_order_base.html:126 @@ -358,15 +375,20 @@ msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/forms.py:45 build/forms.py:87 +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 #: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:91 #: build/templates/build/detail.html:31 common/models.py:696 #: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 -#: order/forms.py:237 order/templates/order/order_wizard/select_parts.html:32 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:193 +#: order/templates/order/sales_order_detail.html:70 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:340 +#: part/forms.py:369 part/forms.py:385 part/models.py:2158 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 #: part/templates/part/part_pricing.html:12 @@ -376,7 +398,8 @@ msgstr "" #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:307 stock/templates/stock/item_base.html:51 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1563 +#: stock/templates/stock/item_base.html:51 #: stock/templates/stock/item_base.html:57 #: stock/templates/stock/item_base.html:240 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 @@ -393,7 +416,7 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:92 order/forms.py:231 stock/forms.py:117 +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 msgid "Serial Numbers" msgstr "" @@ -405,39 +428,57 @@ msgstr "" msgid "Confirm creation of build output" msgstr "" -#: build/forms.py:120 +#: build/forms.py:121 msgid "Confirm deletion of build output" msgstr "" -#: build/forms.py:141 +#: build/forms.py:142 msgid "Confirm unallocation of stock" msgstr "" -#: build/forms.py:165 +#: build/forms.py:166 msgid "Confirm stock allocation" msgstr "" -#: build/forms.py:188 +#: build/forms.py:189 msgid "Mark build as complete" msgstr "" -#: build/forms.py:212 +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:270 +#: 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 +msgid "Location" +msgstr "" + +#: build/forms.py:214 msgid "Location of completed parts" msgstr "" -#: build/forms.py:217 -msgid "Confirm completion with incomplete stock allocation" +#: build/forms.py:219 +msgid "Confirm incomplete" msgstr "" #: build/forms.py:220 +msgid "Confirm completion with incomplete stock allocation" +msgstr "" + +#: build/forms.py:223 msgid "Confirm build completion" msgstr "" -#: build/forms.py:240 build/views.py:66 +#: build/forms.py:243 +msgid "Confirm cancel" +msgstr "" + +#: build/forms.py:243 build/views.py:66 msgid "Confirm build cancellation" msgstr "" -#: build/forms.py:254 +#: build/forms.py:257 msgid "Select quantity of stock to allocate" msgstr "" @@ -462,7 +503,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:127 order/templates/order/purchase_order_detail.html:188 +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:188 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2167 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 #: templates/js/build.js:509 templates/js/build.js:948 @@ -484,11 +527,15 @@ 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 order/models.py:662 +#: build/templates/build/detail.html:26 company/models.py:535 +#: 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 -#: order/templates/order/receive_parts.html:19 part/models.py:321 -#: part/models.py:2054 part/templates/part/part_app_base.html:7 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1856 part/models.py:1868 part/models.py:1886 +#: part/models.py:1961 part/models.py:2057 part/models.py:2142 +#: part/templates/part/part_app_base.html:7 #: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 @@ -558,7 +605,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:212 stock/models.py:429 +#: build/models.py:212 stock/models.py:430 msgid "Batch Code" msgstr "" @@ -566,11 +613,16 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:223 order/models.py:447 +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: build/models.py:223 order/models.py:451 msgid "Target completion date" msgstr "" -#: build/models.py:227 order/models.py:215 +#: build/models.py:227 order/models.py:218 msgid "Completion Date" msgstr "" @@ -587,9 +639,9 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:250 build/templates/build/build_base.html:142 -#: build/templates/build/detail.html:105 order/models.py:118 +#: build/templates/build/detail.html:105 order/models.py:119 #: order/templates/order/order_base.html:138 -#: order/templates/order/sales_order_base.html:138 part/models.py:885 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 #: report/templates/report/inventree_build_order_base.html:159 msgid "Responsible" msgstr "" @@ -602,26 +654,28 @@ msgstr "" #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 -#: stock/models.py:423 stock/templates/stock/item_base.html:330 +#: stock/models.py:424 stock/templates/stock/item_base.html:330 msgid "External Link" msgstr "" -#: build/models.py:257 part/models.py:744 stock/models.py:425 +#: build/models.py:257 part/models.py:744 stock/models.py:426 msgid "Link to external URL" msgstr "" #: build/models.py:261 build/templates/build/navbar.html:59 -#: company/models.py:366 company/templates/company/navbar.html:59 -#: company/templates/company/navbar.html:62 -#: order/templates/order/po_navbar.html:29 +#: company/models.py:129 company/models.py:368 +#: 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 #: order/templates/order/po_navbar.html:32 #: order/templates/order/purchase_order_detail.html:227 +#: order/templates/order/sales_order_detail.html:264 #: order/templates/order/so_navbar.html:33 -#: order/templates/order/so_navbar.html:36 part/models.py:870 +#: order/templates/order/so_navbar.html:36 part/models.py:871 #: part/templates/part/navbar.html:122 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:316 stock/forms.py:348 stock/forms.py:376 stock/models.py:495 -#: stock/models.py:1553 stock/models.py:1663 +#: 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 msgid "Notes" @@ -665,11 +719,11 @@ msgstr "" msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/models.py:1034 order/models.py:751 +#: build/models.py:1034 order/models.py:758 msgid "StockItem is over-allocated" msgstr "" -#: build/models.py:1038 order/models.py:754 +#: build/models.py:1038 order/models.py:761 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -677,19 +731,41 @@ msgstr "" msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1082 +#: build/models.py:1082 stock/templates/stock/item_base.html:302 +#: templates/InvenTree/search.html:167 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "" + +#: build/models.py:1083 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1089 +#: build/models.py:1090 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: 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 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1091 msgid "Source stock item" msgstr "" -#: build/models.py:1101 +#: build/models.py:1104 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1109 +#: build/models.py:1112 +msgid "Install into" +msgstr "" + +#: build/models.py:1113 msgid "Destination stock item" msgstr "" @@ -757,15 +833,6 @@ msgid "" "The following stock items will be allocated to the specified build output" msgstr "" -#: build/templates/build/auto_allocate.html:18 stock/forms.py:346 -#: stock/templates/stock/item_base.html:270 -#: 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 -msgid "Location" -msgstr "" - #: build/templates/build/auto_allocate.html:37 msgid "No stock items found that can be automatically allocated to this build" msgstr "" @@ -836,7 +903,7 @@ msgid "Build Details" msgstr "" #: build/templates/build/build_base.html:96 -#: build/templates/build/detail.html:59 +#: build/templates/build/detail.html:59 order/models.py:445 #: order/templates/order/receive_parts.html:24 #: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236 #: templates/js/barcode.js:119 templates/js/build.js:710 @@ -855,7 +922,7 @@ msgid "Progress" msgstr "" #: build/templates/build/build_base.html:128 -#: build/templates/build/detail.html:84 order/models.py:660 +#: build/templates/build/detail.html:84 order/models.py:667 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 #: order/templates/order/sales_order_ship.html:25 @@ -966,7 +1033,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:46 stock/forms.py:374 +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 msgid "Destination" msgstr "" @@ -1099,7 +1166,7 @@ msgstr "" msgid "Create Build Output" msgstr "" -#: build/views.py:203 stock/models.py:964 stock/views.py:1788 +#: build/views.py:203 stock/models.py:966 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "" @@ -1237,7 +1304,7 @@ msgstr "" msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:62 company/models.py:95 company/models.py:96 +#: common/models.py:62 company/models.py:96 company/models.py:97 msgid "Company name" msgstr "" @@ -1341,8 +1408,8 @@ msgstr "" msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:150 part/models.py:2056 part/templates/part/detail.html:160 -#: report/models.py:185 stock/forms.py:258 templates/js/table_filters.js:24 +#: common/models.py:150 part/models.py:2059 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 #: templates/js/table_filters.js:288 msgid "Template" msgstr "" @@ -1351,7 +1418,7 @@ msgstr "" msgid "Parts are templates by default" msgstr "" -#: common/models.py:157 part/models.py:833 part/templates/part/detail.html:170 +#: common/models.py:157 part/models.py:834 part/templates/part/detail.html:170 #: templates/js/table_filters.js:101 templates/js/table_filters.js:300 msgid "Assembly" msgstr "" @@ -1360,7 +1427,7 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:164 part/models.py:839 part/templates/part/detail.html:180 +#: common/models.py:164 part/models.py:840 part/templates/part/detail.html:180 #: templates/js/table_filters.js:304 msgid "Component" msgstr "" @@ -1369,7 +1436,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:171 part/models.py:850 part/templates/part/detail.html:200 +#: common/models.py:171 part/models.py:851 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "" @@ -1377,7 +1444,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:178 part/models.py:855 part/templates/part/detail.html:210 +#: common/models.py:178 part/models.py:856 part/templates/part/detail.html:210 #: templates/js/table_filters.js:312 msgid "Salable" msgstr "" @@ -1386,7 +1453,7 @@ msgstr "" msgid "Parts are salable by default" msgstr "" -#: common/models.py:185 part/models.py:845 part/templates/part/detail.html:190 +#: common/models.py:185 part/models.py:846 part/templates/part/detail.html:190 #: templates/js/table_filters.js:32 templates/js/table_filters.js:316 msgid "Trackable" msgstr "" @@ -1395,7 +1462,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/models.py:192 part/models.py:865 part/templates/part/detail.html:150 +#: common/models.py:192 part/models.py:866 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "" @@ -1585,12 +1652,12 @@ msgstr "" msgid "Supplied value must be a boolean" msgstr "" -#: company/forms.py:37 company/models.py:137 +#: company/forms.py:37 company/models.py:139 #: company/templates/company/detail.html:40 msgid "Currency" msgstr "" -#: company/forms.py:38 company/models.py:139 +#: company/forms.py:38 company/models.py:141 msgid "Default currency used for this company" msgstr "" @@ -1610,95 +1677,106 @@ msgstr "" msgid "Single quantity price" msgstr "" -#: company/models.py:98 +#: company/models.py:99 msgid "Company description" msgstr "" -#: company/models.py:98 +#: company/models.py:99 msgid "Description of the company" msgstr "" -#: company/models.py:100 company/templates/company/company_base.html:70 +#: company/models.py:101 company/templates/company/company_base.html:70 #: company/templates/company/detail.html:31 templates/js/company.js:60 msgid "Website" msgstr "" -#: company/models.py:100 +#: company/models.py:101 msgid "Company website URL" msgstr "" -#: company/models.py:103 company/templates/company/company_base.html:77 +#: company/models.py:104 company/templates/company/company_base.html:77 msgid "Address" msgstr "" -#: company/models.py:104 +#: company/models.py:105 msgid "Company address" msgstr "" -#: company/models.py:107 +#: company/models.py:108 msgid "Phone number" msgstr "" -#: company/models.py:108 +#: company/models.py:109 msgid "Contact phone number" msgstr "" -#: company/models.py:111 company/templates/company/company_base.html:91 +#: company/models.py:112 company/templates/company/company_base.html:91 msgid "Email" msgstr "" -#: company/models.py:111 +#: company/models.py:112 msgid "Contact email address" msgstr "" -#: company/models.py:114 company/templates/company/company_base.html:98 +#: company/models.py:115 company/templates/company/company_base.html:98 msgid "Contact" msgstr "" -#: company/models.py:115 +#: company/models.py:116 msgid "Point of contact" msgstr "" -#: company/models.py:117 +#: company/models.py:118 company/models.py:355 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 msgid "Link to external company information" msgstr "" -#: company/models.py:129 +#: company/models.py:126 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:131 msgid "is customer" msgstr "" -#: company/models.py:129 +#: company/models.py:131 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:131 +#: company/models.py:133 msgid "is supplier" msgstr "" -#: company/models.py:131 +#: company/models.py:133 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:133 +#: company/models.py:135 msgid "is manufacturer" msgstr "" -#: company/models.py:133 +#: company/models.py:135 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:313 stock/models.py:370 +#: company/models.py:315 stock/models.py:371 #: stock/templates/stock/item_base.html:220 msgid "Base Part" msgstr "" -#: company/models.py:317 order/views.py:1372 +#: company/models.py:319 order/views.py:1372 msgid "Select part" msgstr "" -#: company/models.py:323 company/templates/company/detail.html:60 +#: company/models.py:325 company/templates/company/detail.html:60 #: company/templates/company/supplier_part_base.html:83 -#: company/templates/company/supplier_part_detail.html:25 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 #: order/templates/order/order_base.html:92 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 #: stock/templates/stock/item_base.html:337 templates/js/company.js:48 @@ -1706,81 +1784,83 @@ msgstr "" msgid "Supplier" msgstr "" -#: company/models.py:324 +#: company/models.py:326 msgid "Select supplier" msgstr "" -#: company/models.py:329 company/templates/company/supplier_part_base.html:87 +#: company/models.py:331 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:330 +#: company/models.py:332 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:340 company/templates/company/detail.html:55 +#: company/models.py:342 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:341 +#: company/models.py:343 msgid "Select manufacturer" msgstr "" -#: company/models.py:347 company/templates/company/supplier_part_base.html:99 +#: company/models.py:349 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:348 +#: company/models.py:350 msgid "Manufacturer part number" msgstr "" -#: company/models.py:353 part/models.py:743 -#: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1555 templates/js/company.js:208 templates/js/part.js:430 -msgid "Link" -msgstr "" - -#: company/models.py:354 +#: company/models.py:356 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:360 +#: company/models.py:362 msgid "Supplier part description" msgstr "" -#: company/models.py:365 company/templates/company/supplier_part_base.html:113 -#: company/templates/company/supplier_part_detail.html:38 +#: company/models.py:367 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:369 +#: company/models.py:371 +msgid "base cost" +msgstr "" + +#: company/models.py:371 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:371 company/templates/company/supplier_part_base.html:106 -#: stock/models.py:394 stock/templates/stock/item_base.html:295 +#: company/models.py:373 company/templates/company/supplier_part_base.html:106 +#: stock/models.py:395 stock/templates/stock/item_base.html:295 #: templates/js/stock.js:663 msgid "Packaging" msgstr "" -#: company/models.py:371 +#: company/models.py:373 msgid "Part packaging" msgstr "" -#: company/models.py:373 +#: company/models.py:375 msgid "multiple" msgstr "" +#: company/models.py:375 +msgid "Order multiple" +msgstr "" + #: company/templates/company/assigned_stock.html:10 #: company/templates/company/navbar.html:51 #: company/templates/company/navbar.html:54 templates/js/build.js:411 @@ -1825,6 +1905,19 @@ msgstr "" msgid "Phone" msgstr "" +#: company/templates/company/delete.html:7 +#, python-format +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.<br>\n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + #: company/templates/company/detail.html:21 msgid "Company Name" msgstr "" @@ -1837,9 +1930,9 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/detail.html:65 -#: order/templates/order/sales_order_base.html:92 stock/models.py:412 -#: stock/models.py:413 stock/templates/stock/item_base.html:247 +#: company/templates/company/detail.html:65 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:413 +#: stock/models.py:414 stock/templates/stock/item_base.html:247 #: templates/js/company.js:40 templates/js/order.js:267 msgid "Customer" msgstr "" @@ -1850,6 +1943,7 @@ msgid "Supplier Parts" msgstr "" #: company/templates/company/detail_part.html:20 +#: order/templates/order/order_wizard/select_parts.html:42 #: order/templates/order/purchase_order_detail.html:75 msgid "Create new supplier part" msgstr "" @@ -1889,13 +1983,13 @@ msgid "Create new Part" msgstr "" #: company/templates/company/detail_part.html:72 company/views.py:62 -#: order/templates/order/purchase_orders.html:182 +#: order/templates/order/purchase_orders.html:183 #: part/templates/part/supplier.html:50 msgid "New Supplier" msgstr "" #: company/templates/company/detail_part.html:73 company/views.py:279 -#: order/templates/order/purchase_orders.html:183 +#: order/templates/order/purchase_orders.html:184 msgid "Create new Supplier" msgstr "" @@ -2035,7 +2129,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:379 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:380 #: stock/templates/stock/item_base.html:342 templates/js/company.js:180 msgid "Supplier Part" msgstr "" @@ -2109,7 +2203,7 @@ msgstr "" msgid "Customers" msgstr "" -#: company/views.py:76 order/templates/order/sales_orders.html:184 +#: company/views.py:76 order/templates/order/sales_orders.html:185 msgid "New Customer" msgstr "" @@ -2149,7 +2243,7 @@ msgstr "" msgid "Edited company information" msgstr "" -#: company/views.py:285 order/templates/order/sales_orders.html:185 +#: company/views.py:285 order/templates/order/sales_orders.html:186 msgid "Create new Customer" msgstr "" @@ -2201,7 +2295,7 @@ msgstr "" msgid "Label description" msgstr "" -#: label/models.py:116 stock/forms.py:201 +#: label/models.py:116 stock/forms.py:202 msgid "Label" msgstr "" @@ -2217,6 +2311,10 @@ msgstr "" msgid "Label template is enabled" msgstr "" +#: label/models.py:129 +msgid "Width [mm]" +msgstr "" + #: label/models.py:130 msgid "Label width, specified in mm" msgstr "" @@ -2263,24 +2361,24 @@ msgstr "" msgid "Purchase Order reference" msgstr "" -#: order/forms.py:109 +#: order/forms.py:110 msgid "Target date for order delivery. Order will be overdue after this date." msgstr "" -#: order/forms.py:137 +#: order/forms.py:138 msgid "Enter sales order number" msgstr "" -#: order/forms.py:143 order/models.py:448 +#: order/forms.py:145 order/models.py:452 msgid "" "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/forms.py:233 +#: order/forms.py:235 msgid "Enter stock item serial numbers" msgstr "" -#: order/forms.py:239 +#: order/forms.py:241 msgid "Enter quantity of stock items" msgstr "" @@ -2296,137 +2394,183 @@ msgstr "" msgid "Link to external page" msgstr "" -#: order/models.py:117 +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "" + +#: order/models.py:118 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:122 +#: order/models.py:123 msgid "Order notes" msgstr "" -#: order/models.py:181 order/models.py:441 +#: order/models.py:182 order/models.py:445 msgid "Purchase order status" msgstr "" -#: order/models.py:189 +#: order/models.py:191 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:192 +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:194 msgid "Supplier order reference code" msgstr "" -#: order/models.py:203 +#: order/models.py:201 +msgid "received by" +msgstr "" + +#: order/models.py:206 msgid "Issue Date" msgstr "" -#: order/models.py:204 +#: order/models.py:207 msgid "Date order was issued" msgstr "" -#: order/models.py:209 +#: order/models.py:212 msgid "Target Delivery Date" msgstr "" -#: order/models.py:210 +#: order/models.py:213 msgid "" "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:216 +#: order/models.py:219 msgid "Date order was completed" msgstr "" -#: order/models.py:240 order/models.py:339 part/views.py:1586 -#: stock/models.py:269 stock/models.py:948 +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:950 msgid "Quantity must be greater than zero" msgstr "" -#: order/models.py:245 +#: order/models.py:248 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:334 +#: order/models.py:337 msgid "Lines can only be received against an order marked as 'Placed'" msgstr "" -#: order/models.py:356 +#: order/models.py:359 msgid "Received items" msgstr "" -#: order/models.py:437 +#: order/models.py:441 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:443 +#: order/models.py:447 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:447 msgid "Customer order reference code" msgstr "" -#: order/models.py:501 +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:462 +msgid "shipped by" +msgstr "" + +#: order/models.py:506 msgid "SalesOrder cannot be shipped as it is not currently pending" msgstr "" -#: order/models.py:588 +#: order/models.py:593 msgid "Item quantity" msgstr "" -#: order/models.py:590 +#: order/models.py:595 msgid "Line item reference" msgstr "" -#: order/models.py:592 +#: order/models.py:597 msgid "Line item notes" msgstr "" -#: order/models.py:618 order/templates/order/order_base.html:9 +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "" + +#: order/models.py:624 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:309 templates/js/order.js:148 msgid "Purchase Order" msgstr "" -#: order/models.py:631 +#: order/models.py:638 msgid "Supplier part" msgstr "" -#: order/models.py:634 +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:207 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "" + +#: order/models.py:641 msgid "Number of items received" msgstr "" -#: order/models.py:641 stock/models.py:505 +#: order/models.py:648 stock/models.py:506 #: stock/templates/stock/item_base.html:316 msgid "Purchase Price" msgstr "" -#: order/models.py:642 +#: order/models.py:649 msgid "Unit purchase price" msgstr "" -#: order/models.py:736 order/models.py:738 +#: order/models.py:743 order/models.py:745 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:742 +#: order/models.py:749 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:744 +#: order/models.py:751 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:747 +#: order/models.py:754 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:757 +#: order/models.py:764 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:773 +#: order/models.py:769 +msgid "Line" +msgstr "" + +#: order/models.py:780 +msgid "Item" +msgstr "" + +#: order/models.py:781 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:776 +#: order/models.py:784 msgid "Enter stock allocation quantity" msgstr "" @@ -2469,27 +2613,25 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:98 templates/js/order.js:179 -msgid "Supplier Reference" -msgstr "" - #: order/templates/order/order_base.html:117 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:131 -#: order/templates/order/purchase_order_detail.html:207 -#: order/templates/order/receive_parts.html:22 -#: order/templates/order/sales_order_base.html:131 -msgid "Received" -msgstr "" - #: order/templates/order/order_cancel.html:7 #: order/templates/order/sales_order_cancel.html:9 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" +#: order/templates/order/order_complete.html:7 +msgid "Mark this order as complete?" +msgstr "" + +#: order/templates/order/order_issue.html:7 +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" + #: order/templates/order/order_notes.html:13 msgid "Order Notes" msgstr "" @@ -2668,11 +2810,16 @@ msgstr "" #: order/templates/order/sales_order_detail.html:75 #: order/templates/order/sales_order_detail.html:157 #: report/templates/report/inventree_test_report_base.html:75 -#: stock/models.py:417 stock/templates/stock/item_base.html:234 +#: stock/models.py:418 stock/templates/stock/item_base.html:234 #: templates/js/build.js:418 msgid "Serial Number" msgstr "" +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:338 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "" + #: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 #: templates/js/build.js:789 msgid "Edit stock allocation" @@ -2683,8 +2830,16 @@ msgstr "" msgid "Delete stock allocation" msgstr "" -#: order/templates/order/sales_order_detail.html:229 order/views.py:1351 -#: templates/js/build.js:523 templates/js/build.js:785 +#: order/templates/order/sales_order_detail.html:170 +msgid "No matching line items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 msgid "Allocated" msgstr "" @@ -2852,6 +3007,11 @@ msgstr "" msgid "No lines specified" msgstr "" +#: order/views.py:1060 +#, python-brace-format +msgid "Ordered {n} parts" +msgstr "" + #: order/views.py:1117 msgid "Supplier part must be specified" msgstr "" @@ -2877,7 +3037,8 @@ msgid "Allocate Serial Numbers" msgstr "" #: order/views.py:1351 -msgid "items" +#, python-brace-format +msgid "Allocated {n} items" msgstr "" #: order/views.py:1367 @@ -2908,7 +3069,7 @@ msgstr "" msgid "Remove allocation" msgstr "" -#: part/bom.py:138 part/models.py:72 part/models.py:761 +#: part/bom.py:138 part/models.py:72 part/models.py:762 #: part/templates/part/category.html:62 part/templates/part/detail.html:90 msgid "Default Location" msgstr "" @@ -2930,11 +3091,11 @@ msgstr "" msgid "Error reading BOM file (incorrect row size)" msgstr "" -#: part/forms.py:89 stock/forms.py:264 +#: part/forms.py:89 stock/forms.py:265 msgid "File Format" msgstr "" -#: part/forms.py:89 stock/forms.py:264 +#: part/forms.py:89 stock/forms.py:265 msgid "Select output file format" msgstr "" @@ -2978,7 +3139,7 @@ msgstr "" msgid "Include part supplier data in exported BOM" msgstr "" -#: part/forms.py:120 part/models.py:2054 +#: part/forms.py:120 part/models.py:2057 msgid "Parent Part" msgstr "" @@ -2990,63 +3151,75 @@ msgstr "" msgid "Clear existing BOM items" msgstr "" -#: part/forms.py:132 +#: part/forms.py:133 msgid "Confirm BOM duplication" msgstr "" -#: part/forms.py:150 +#: part/forms.py:151 +msgid "validate" +msgstr "" + +#: part/forms.py:151 msgid "Confirm that the BOM is correct" msgstr "" -#: part/forms.py:162 +#: part/forms.py:163 +msgid "BOM file" +msgstr "" + +#: part/forms.py:163 msgid "Select BOM file to upload" msgstr "" -#: part/forms.py:181 +#: part/forms.py:182 msgid "Related Part" msgstr "" -#: part/forms.py:200 +#: part/forms.py:201 msgid "Select part category" msgstr "" -#: part/forms.py:217 +#: part/forms.py:218 msgid "Duplicate all BOM data for this part" msgstr "" -#: part/forms.py:218 +#: part/forms.py:219 msgid "Copy BOM" msgstr "" -#: part/forms.py:223 +#: part/forms.py:224 msgid "Duplicate all parameter data for this part" msgstr "" -#: part/forms.py:224 +#: part/forms.py:225 msgid "Copy Parameters" msgstr "" -#: part/forms.py:229 +#: part/forms.py:230 msgid "Confirm part creation" msgstr "" -#: part/forms.py:234 +#: part/forms.py:235 msgid "Include category parameter templates" msgstr "" -#: part/forms.py:239 +#: part/forms.py:240 msgid "Include parent categories parameter templates" msgstr "" -#: part/forms.py:319 +#: part/forms.py:320 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:323 +#: part/forms.py:324 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:368 +#: part/forms.py:342 part/models.py:2151 +msgid "Sub part" +msgstr "" + +#: part/forms.py:370 msgid "Input quantity for price calculation" msgstr "" @@ -3062,7 +3235,7 @@ msgstr "" msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:82 part/models.py:2099 +#: part/models.py:82 part/models.py:2103 #: part/templates/part/part_app_base.html:9 msgid "Part Category" msgstr "" @@ -3132,7 +3305,7 @@ msgstr "" msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:724 part/templates/part/detail.html:73 +#: part/models.py:724 part/models.py:2102 part/templates/part/detail.html:73 #: part/templates/part/set_category.html:15 templates/js/part.js:384 msgid "Category" msgstr "" @@ -3159,243 +3332,262 @@ msgstr "" msgid "Revision" msgstr "" -#: part/models.py:759 +#: part/models.py:760 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:806 part/templates/part/detail.html:97 +#: part/models.py:807 part/templates/part/detail.html:97 msgid "Default Supplier" msgstr "" -#: part/models.py:807 +#: part/models.py:808 msgid "Default supplier part" msgstr "" -#: part/models.py:814 +#: part/models.py:815 msgid "Default Expiry" msgstr "" -#: part/models.py:815 +#: part/models.py:816 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:820 part/templates/part/detail.html:113 +#: part/models.py:821 part/templates/part/detail.html:113 msgid "Minimum Stock" msgstr "" -#: part/models.py:821 +#: part/models.py:822 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:827 part/templates/part/detail.html:106 +#: part/models.py:828 part/models.py:2031 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "" -#: part/models.py:828 +#: part/models.py:829 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:834 +#: part/models.py:835 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:840 +#: part/models.py:841 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:846 +#: part/models.py:847 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:851 +#: part/models.py:852 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:856 +#: part/models.py:857 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:860 part/templates/part/detail.html:227 +#: part/models.py:861 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 #: templates/js/table_filters.js:214 templates/js/table_filters.js:283 msgid "Active" msgstr "" -#: part/models.py:861 +#: part/models.py:862 msgid "Is this part active?" msgstr "" -#: part/models.py:866 +#: part/models.py:867 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:871 +#: part/models.py:872 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:874 +#: part/models.py:875 msgid "BOM checksum" msgstr "" -#: part/models.py:874 +#: part/models.py:875 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:877 +#: part/models.py:878 msgid "BOM checked by" msgstr "" -#: part/models.py:879 +#: part/models.py:880 msgid "BOM checked date" msgstr "" -#: part/models.py:881 part/templates/part/detail.html:126 -#: templates/js/order.js:293 -msgid "Creation Date" -msgstr "" - -#: part/models.py:883 +#: part/models.py:884 msgid "Creation User" msgstr "" -#: part/models.py:1927 +#: part/models.py:1929 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:1944 +#: part/models.py:1946 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:1963 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1966 templates/js/part.js:561 templates/js/stock.js:104 msgid "Test Name" msgstr "" -#: part/models.py:1964 +#: part/models.py:1967 msgid "Enter a name for the test" msgstr "" -#: part/models.py:1969 +#: part/models.py:1972 msgid "Test Description" msgstr "" -#: part/models.py:1970 +#: part/models.py:1973 msgid "Enter description for this test" msgstr "" -#: part/models.py:1975 templates/js/part.js:570 +#: part/models.py:1978 templates/js/part.js:570 #: templates/js/table_filters.js:200 msgid "Required" msgstr "" -#: part/models.py:1976 +#: part/models.py:1979 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:1981 templates/js/part.js:578 +#: part/models.py:1984 templates/js/part.js:578 msgid "Requires Value" msgstr "" -#: part/models.py:1982 +#: part/models.py:1985 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:1987 templates/js/part.js:585 +#: part/models.py:1990 templates/js/part.js:585 msgid "Requires Attachment" msgstr "" -#: part/models.py:1988 +#: part/models.py:1991 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2021 +#: part/models.py:2024 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2026 +#: part/models.py:2029 msgid "Parameter Name" msgstr "" -#: part/models.py:2028 +#: part/models.py:2031 msgid "Parameter Units" msgstr "" -#: part/models.py:2056 part/models.py:2104 +#: part/models.py:2059 part/models.py:2108 part/models.py:2109 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "" -#: part/models.py:2058 +#: part/models.py:2061 msgid "Data" msgstr "" -#: part/models.py:2058 +#: part/models.py:2061 msgid "Parameter Value" msgstr "" -#: part/models.py:2108 +#: part/models.py:2113 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "" + +#: part/models.py:2114 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2136 +#: part/models.py:2143 msgid "Select parent part" msgstr "" -#: part/models.py:2144 +#: part/models.py:2152 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2150 +#: part/models.py:2158 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2152 +#: part/models.py:2160 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "" + +#: part/models.py:2160 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2155 +#: part/models.py:2163 +msgid "Overage" +msgstr "" + +#: part/models.py:2164 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2158 +#: part/models.py:2167 msgid "BOM item reference" msgstr "" -#: part/models.py:2161 +#: part/models.py:2170 msgid "BOM item notes" msgstr "" -#: part/models.py:2163 +#: part/models.py:2172 +msgid "Checksum" +msgstr "" + +#: part/models.py:2172 msgid "BOM line checksum" msgstr "" -#: part/models.py:2167 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2176 templates/js/bom.js:275 templates/js/bom.js:282 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "" -#: part/models.py:2168 +#: part/models.py:2177 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2244 part/views.py:1592 part/views.py:1644 -#: stock/models.py:259 +#: part/models.py:2253 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2253 part/models.py:2255 +#: part/models.py:2262 part/models.py:2264 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2258 +#: part/models.py:2267 msgid "BOM Item" msgstr "" -#: part/models.py:2379 +#: part/models.py:2384 +msgid "Part 1" +msgstr "" + +#: part/models.py:2388 +msgid "Part 2" +msgstr "" + +#: part/models.py:2388 msgid "Select Related Part" msgstr "" -#: part/models.py:2411 +#: part/models.py:2420 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3405,23 +3597,6 @@ msgstr "" msgid "Part Stock Allocations" msgstr "" -#: part/templates/part/allocation.html:17 -#: part/templates/part/allocation.html:45 -msgid "Order" -msgstr "" - -#: part/templates/part/allocation.html:18 -#: part/templates/part/allocation.html:24 -#: part/templates/part/allocation.html:31 -#: part/templates/part/allocation.html:49 -#: stock/templates/stock/item_base.html:8 -#: 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 -msgid "Stock Item" -msgstr "" - #: part/templates/part/attachments.html:10 msgid "Part Attachments" msgstr "" @@ -3439,6 +3614,22 @@ msgstr "" msgid "Bill of Materials" msgstr "" +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for <i>%(part)s</i> has changed, and must be validated.<br>" +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for <i>%(part)s</i> was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, python-format +msgid "The BOM for <i>%(part)s</i> has not been validated." +msgstr "" + #: part/templates/part/bom.html:32 msgid "Remove selected BOM items" msgstr "" @@ -3578,6 +3769,20 @@ msgstr "" msgid "Each part must already exist in the database" msgstr "" +#: part/templates/part/bom_upload/upload_file.html:27 +msgid "Upload File" +msgstr "" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:<br><i>%(part)s</i>" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + #: part/templates/part/build.html:10 msgid "Part Builds" msgstr "" @@ -3655,7 +3860,7 @@ msgstr "" msgid "Create new Part Category" msgstr "" -#: part/templates/part/category.html:240 stock/views.py:1358 +#: part/templates/part/category.html:240 stock/views.py:1359 msgid "Create new Stock Location" msgstr "" @@ -3749,10 +3954,6 @@ msgstr "" msgid "Stock Expiry Time" msgstr "" -#: part/templates/part/detail.html:132 -msgid "Created By" -msgstr "" - #: part/templates/part/detail.html:139 msgid "Responsible User" msgstr "" @@ -3874,7 +4075,7 @@ msgstr "" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1650 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1652 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "" @@ -3884,7 +4085,7 @@ msgid "Edit" msgstr "" #: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 users/models.py:175 +#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:175 msgid "Delete" msgstr "" @@ -4376,18 +4577,26 @@ msgid "Sales order query filters" msgstr "" #: report/models.py:500 +msgid "Snippet" +msgstr "" + +#: report/models.py:501 msgid "Report snippet file" msgstr "" -#: report/models.py:504 +#: report/models.py:505 msgid "Snippet file description" msgstr "" -#: report/models.py:539 +#: report/models.py:540 +msgid "Asset" +msgstr "" + +#: report/models.py:541 msgid "Report asset file" msgstr "" -#: report/models.py:542 +#: report/models.py:544 msgid "Asset file description" msgstr "" @@ -4409,12 +4618,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1638 +#: stock/models.py:1640 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1644 +#: stock/models.py:1646 msgid "Result" msgstr "" @@ -4431,301 +4640,345 @@ msgstr "" msgid "Fail" msgstr "" -#: stock/forms.py:117 +#: stock/api.py:199 +#, python-brace-format +msgid "Updated stock for {n} items" +msgstr "" + +#: stock/api.py:268 +#, python-brace-format +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 +msgid "Expiry Date" +msgstr "" + +#: stock/forms.py:115 stock/forms.py:407 +msgid "Expiration date for this stock item" +msgstr "" + +#: stock/forms.py:118 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:202 stock/forms.py:258 -msgid "Select test report template" +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" msgstr "" -#: stock/forms.py:266 -msgid "Include stock items in sub locations" +#: stock/forms.py:171 +msgid "Serial numbers" msgstr "" -#: stock/forms.py:301 -msgid "Stock item to install" +#: stock/forms.py:171 +msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:308 -msgid "Stock quantity to assign" -msgstr "" - -#: stock/forms.py:336 -msgid "Must not exceed available quantity" -msgstr "" - -#: stock/forms.py:346 -msgid "Destination location for uninstalled items" -msgstr "" - -#: stock/forms.py:348 +#: stock/forms.py:173 stock/forms.py:349 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:350 +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "" + +#: stock/forms.py:267 templates/js/table_filters.js:111 +msgid "Include sublocations" +msgstr "" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "" + +#: stock/forms.py:351 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:350 +#: stock/forms.py:351 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/forms.py:374 +#: stock/forms.py:375 msgid "Destination stock location" msgstr "" -#: stock/forms.py:376 +#: stock/forms.py:377 msgid "Add note (required)" msgstr "" -#: stock/forms.py:380 stock/views.py:852 stock/views.py:1050 +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 msgid "Confirm stock adjustment" msgstr "" -#: stock/forms.py:380 +#: stock/forms.py:381 msgid "Confirm movement of stock items" msgstr "" -#: stock/forms.py:382 +#: stock/forms.py:383 msgid "Set Default Location" msgstr "" -#: stock/forms.py:382 +#: stock/forms.py:383 msgid "Set the destination as the default location for selected parts" msgstr "" -#: stock/models.py:204 +#: stock/models.py:54 stock/models.py:511 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:512 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:205 msgid "Created stock item" msgstr "" -#: stock/models.py:240 +#: stock/models.py:241 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:276 +#: stock/models.py:277 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:286 stock/models.py:295 +#: stock/models.py:287 stock/models.py:296 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:287 +#: stock/models.py:288 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:309 +#: stock/models.py:310 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:315 +#: stock/models.py:316 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:322 +#: stock/models.py:323 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:362 +#: stock/models.py:363 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:371 +#: stock/models.py:372 msgid "Base part" msgstr "" -#: stock/models.py:380 +#: stock/models.py:381 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:385 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:386 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" msgstr "" -#: stock/models.py:388 +#: stock/models.py:389 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:395 +#: stock/models.py:396 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:400 stock/templates/stock/item_base.html:255 +#: stock/models.py:401 stock/templates/stock/item_base.html:255 msgid "Installed In" msgstr "" -#: stock/models.py:403 +#: stock/models.py:404 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:419 +#: stock/models.py:420 msgid "Serial number for this item" msgstr "" -#: stock/models.py:431 +#: stock/models.py:432 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:435 +#: stock/models.py:436 msgid "Stock Quantity" msgstr "" -#: stock/models.py:444 +#: stock/models.py:445 msgid "Source Build" msgstr "" -#: stock/models.py:446 +#: stock/models.py:447 msgid "Build for this stock item" msgstr "" -#: stock/models.py:457 +#: stock/models.py:458 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:460 +#: stock/models.py:461 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:466 +#: stock/models.py:467 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:472 stock/templates/stock/item_base.html:349 -#: templates/js/stock.js:652 -msgid "Expiry Date" -msgstr "" - -#: stock/models.py:473 +#: stock/models.py:474 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:486 +#: stock/models.py:487 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:487 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:496 stock/templates/stock/item_notes.html:13 +#: stock/models.py:497 stock/templates/stock/item_notes.html:13 #: stock/templates/stock/navbar.html:54 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:506 +#: stock/models.py:507 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:610 +#: stock/models.py:612 msgid "Assigned to Customer" msgstr "" -#: stock/models.py:612 +#: stock/models.py:614 msgid "Manually assigned to customer" msgstr "" -#: stock/models.py:625 +#: stock/models.py:627 msgid "Returned from customer" msgstr "" -#: stock/models.py:627 +#: stock/models.py:629 msgid "Returned to location" msgstr "" -#: stock/models.py:787 +#: stock/models.py:789 msgid "Installed into stock item" msgstr "" -#: stock/models.py:795 +#: stock/models.py:797 msgid "Installed stock item" msgstr "" -#: stock/models.py:819 +#: stock/models.py:821 msgid "Uninstalled stock item" msgstr "" -#: stock/models.py:838 +#: stock/models.py:840 msgid "Uninstalled into location" msgstr "" -#: stock/models.py:939 +#: stock/models.py:941 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:945 +#: stock/models.py:947 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:951 +#: stock/models.py:953 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:954 +#: stock/models.py:956 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:957 +#: stock/models.py:959 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:989 +#: stock/models.py:991 msgid "Add serial number" msgstr "" -#: stock/models.py:992 +#: stock/models.py:994 #, python-brace-format msgid "Serialized {n} items" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1072 msgid "Split from existing stock" msgstr "" -#: stock/models.py:1108 +#: stock/models.py:1110 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1551 +#: stock/models.py:1553 msgid "Title" msgstr "" -#: stock/models.py:1551 +#: stock/models.py:1553 msgid "Tracking entry title" msgstr "" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Entry notes" msgstr "" -#: stock/models.py:1555 +#: stock/models.py:1557 msgid "Link to external page for further information" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1617 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1621 +#: stock/models.py:1623 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1639 +#: stock/models.py:1641 msgid "Test name" msgstr "" -#: stock/models.py:1645 templates/js/table_filters.js:190 +#: stock/models.py:1647 templates/js/table_filters.js:190 msgid "Test result" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1653 msgid "Test output value" msgstr "" -#: stock/models.py:1658 +#: stock/models.py:1660 msgid "Test result attachment" msgstr "" -#: stock/models.py:1664 +#: stock/models.py:1666 msgid "Test notes" msgstr "" @@ -4888,11 +5141,6 @@ msgstr "" msgid "Barcode Identifier" msgstr "" -#: stock/templates/stock/item_base.html:302 templates/InvenTree/search.html:167 -#: templates/js/build.js:655 templates/navbar.html:29 -msgid "Build" -msgstr "" - #: stock/templates/stock/item_base.html:323 msgid "Parent Item" msgstr "" @@ -5070,7 +5318,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1331 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 msgid "Convert Stock Item" msgstr "" @@ -5090,8 +5338,8 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:230 stock/views.py:1321 stock/views.py:1432 -#: stock/views.py:1797 +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5179,95 +5427,121 @@ msgstr "" msgid "Move Stock Items" msgstr "" +#: stock/views.py:998 +msgid "Move" +msgstr "" + #: stock/views.py:999 msgid "Count Stock Items" msgstr "" +#: stock/views.py:999 +msgid "Count" +msgstr "" + #: stock/views.py:1000 msgid "Remove From Stock" msgstr "" +#: stock/views.py:1000 +msgid "Take" +msgstr "" + #: stock/views.py:1001 msgid "Add Stock Items" msgstr "" +#: stock/views.py:1001 users/models.py:171 +msgid "Add" +msgstr "" + #: stock/views.py:1002 msgid "Delete Stock Items" msgstr "" -#: stock/views.py:1030 +#: stock/views.py:1031 msgid "Must enter integer value" msgstr "" -#: stock/views.py:1035 +#: stock/views.py:1036 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:1042 +#: stock/views.py:1043 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:1106 +#: stock/views.py:1107 msgid "No action performed" msgstr "" -#: stock/views.py:1149 +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "" + +#: stock/views.py:1150 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:1189 +#: stock/views.py:1190 msgid "No items were moved" msgstr "" -#: stock/views.py:1192 +#: stock/views.py:1193 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:1211 +#: stock/views.py:1212 #, python-brace-format msgid "Deleted {n} stock items" msgstr "" -#: stock/views.py:1223 +#: stock/views.py:1224 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:1449 +#: stock/views.py:1450 msgid "Serialize Stock" msgstr "" -#: stock/views.py:1542 templates/js/build.js:210 +#: stock/views.py:1543 templates/js/build.js:210 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1684 +#: stock/views.py:1685 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1766 +#: stock/views.py:1767 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1866 +#: stock/views.py:1867 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1879 +#: stock/views.py:1880 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1890 +#: stock/views.py:1891 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1897 +#: stock/views.py:1898 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1906 +#: stock/views.py:1907 msgid "Add Stock Tracking Entry" msgstr "" @@ -5371,10 +5645,6 @@ msgstr "" msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/category.html:67 -msgid "Default Value" -msgstr "" - #: templates/InvenTree/settings/category.html:70 #: templates/InvenTree/settings/part.html:81 msgid "Edit Template" @@ -5683,10 +5953,6 @@ msgstr "" msgid "Open subassembly" msgstr "" -#: templates/js/bom.js:216 templates/js/bom.js:269 -msgid "Optional" -msgstr "" - #: templates/js/bom.js:261 msgid "No pricing available" msgstr "" @@ -5695,10 +5961,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/bom.js:338 templates/js/build.js:571 templates/js/build.js:984 -msgid "Actions" -msgstr "" - #: templates/js/bom.js:346 msgid "Validate BOM Item" msgstr "" @@ -5959,10 +6221,6 @@ msgstr "" msgid "No sales orders found" msgstr "" -#: templates/js/order.js:303 -msgid "Shipment Date" -msgstr "" - #: templates/js/part.js:51 templates/js/part.js:136 msgid "Trackable part" msgstr "" @@ -6282,10 +6540,6 @@ msgstr "" msgid "Item has been allocated" msgstr "" -#: templates/js/table_filters.js:111 -msgid "Include sublocations" -msgstr "" - #: templates/js/table_filters.js:112 msgid "Include stock in sublocations" msgstr "" @@ -6483,10 +6737,6 @@ msgstr "" msgid "Password" msgstr "" -#: templates/registration/login.html:76 -msgid "Enter password" -msgstr "" - #: templates/registration/login.html:83 msgid "Username / password combination is incorrect" msgstr "" @@ -6623,10 +6873,6 @@ msgstr "" msgid "Permission to view items" msgstr "" -#: users/models.py:171 -msgid "Add" -msgstr "" - #: users/models.py:171 msgid "Permission to add items" msgstr "" diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po index 7fe67bf929..bb954c049d 100644 --- a/InvenTree/locale/es/LC_MESSAGES/django.po +++ b/InvenTree/locale/es/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-03 02:10+0000\n" +"POT-Creation-Date: 2021-04-04 20:22+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" @@ -34,32 +34,47 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:187 +#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120 +#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223 +#: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60 +#: order/forms.py:71 part/forms.py:132 msgid "Confirm" msgstr "" #: InvenTree/forms.py:126 +msgid "Confirm delete" +msgstr "" + +#: InvenTree/forms.py:127 msgid "Confirm item deletion" msgstr "" -#: InvenTree/forms.py:158 +#: InvenTree/forms.py:159 templates/registration/login.html:76 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:160 msgid "Enter new password" msgstr "" -#: InvenTree/forms.py:165 +#: InvenTree/forms.py:167 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:168 msgid "Confirm new password" msgstr "" -#: InvenTree/forms.py:200 +#: InvenTree/forms.py:203 msgid "Apply Theme" msgstr "" -#: InvenTree/forms.py:230 +#: InvenTree/forms.py:233 msgid "Select Category" msgstr "" -#: InvenTree/helpers.py:361 order/models.py:242 order/models.py:341 -#: stock/views.py:1762 +#: InvenTree/helpers.py:361 order/models.py:245 order/models.py:344 +#: stock/views.py:1763 msgid "Invalid quantity provided" msgstr "" @@ -91,7 +106,7 @@ msgstr "" msgid "Number of unique serial number ({s}) must match quantity ({q})" msgstr "" -#: InvenTree/models.py:59 stock/models.py:1657 +#: InvenTree/models.py:59 stock/models.py:1659 msgid "Attachment" msgstr "" @@ -107,7 +122,7 @@ msgstr "" msgid "File comment" msgstr "" -#: InvenTree/models.py:68 InvenTree/models.py:69 +#: 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 msgid "User" @@ -118,20 +133,21 @@ msgid "upload date" msgstr "" #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101 -#: part/models.py:686 part/templates/part/params.html:27 report/models.py:179 -#: templates/InvenTree/search.html:136 templates/InvenTree/search.html:273 -#: templates/js/part.js:109 +#: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27 +#: report/models.py:179 templates/InvenTree/search.html:136 +#: templates/InvenTree/search.html:273 templates/js/part.js:109 msgid "Name" msgstr "" #: InvenTree/models.py:114 build/models.py:134 -#: build/templates/build/detail.html:21 company/models.py:359 +#: build/templates/build/detail.html:21 company/models.py:361 #: 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 -#: order/templates/order/purchase_order_detail.html:168 part/models.py:710 -#: part/templates/part/detail.html:54 part/templates/part/set_category.html:14 -#: report/models.py:192 +#: order/models.py:101 order/templates/order/purchase_order_detail.html:168 +#: part/models.py:710 part/templates/part/detail.html:54 +#: part/templates/part/set_category.html:14 report/models.py:192 +#: report/models.py:505 report/models.py:544 #: report/templates/report/inventree_build_order_base.html:118 #: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208 #: templates/InvenTree/search.html:280 @@ -246,7 +262,8 @@ msgid "Invalid character in part name" msgstr "" #: InvenTree/validators.py:63 -msgid "IPN must match regex pattern" +#, python-brace-format +msgid "IPN must match regex pattern {pat}" msgstr "" #: InvenTree/validators.py:77 InvenTree/validators.py:91 @@ -344,7 +361,7 @@ msgid "Order target date" msgstr "" #: build/forms.py:39 build/templates/build/build_base.html:104 -#: build/templates/build/detail.html:121 +#: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144 #: order/templates/order/order_base.html:124 #: order/templates/order/sales_order_base.html:117 #: report/templates/report/inventree_build_order_base.html:126 @@ -358,15 +375,20 @@ msgid "" "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/forms.py:45 build/forms.py:87 +#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103 #: build/templates/build/auto_allocate.html:17 #: build/templates/build/build_base.html:91 #: build/templates/build/detail.html:31 common/models.py:696 #: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77 -#: order/forms.py:237 order/templates/order/order_wizard/select_parts.html:32 +#: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261 +#: order/forms.py:278 order/models.py:593 order/models.py:784 +#: order/templates/order/order_wizard/select_parts.html:32 #: order/templates/order/purchase_order_detail.html:193 +#: order/templates/order/sales_order_detail.html:70 #: order/templates/order/sales_order_detail.html:77 #: order/templates/order/sales_order_detail.html:159 +#: order/templates/order/sales_order_detail.html:224 part/forms.py:340 +#: part/forms.py:369 part/forms.py:385 part/models.py:2158 #: part/templates/part/allocation.html:19 #: part/templates/part/allocation.html:53 #: part/templates/part/part_pricing.html:12 @@ -376,7 +398,8 @@ msgstr "" #: report/templates/report/inventree_po_report.html:91 #: report/templates/report/inventree_so_report.html:91 #: report/templates/report/inventree_test_report_base.html:77 -#: stock/forms.py:307 stock/templates/stock/item_base.html:51 +#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1563 +#: stock/templates/stock/item_base.html:51 #: stock/templates/stock/item_base.html:57 #: stock/templates/stock/item_base.html:240 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364 @@ -393,7 +416,7 @@ msgstr "" msgid "Enter quantity for build output" msgstr "" -#: build/forms.py:92 order/forms.py:231 stock/forms.py:117 +#: build/forms.py:92 order/forms.py:233 stock/forms.py:118 msgid "Serial Numbers" msgstr "" @@ -405,39 +428,57 @@ msgstr "" msgid "Confirm creation of build output" msgstr "" -#: build/forms.py:120 +#: build/forms.py:121 msgid "Confirm deletion of build output" msgstr "" -#: build/forms.py:141 +#: build/forms.py:142 msgid "Confirm unallocation of stock" msgstr "" -#: build/forms.py:165 +#: build/forms.py:166 msgid "Confirm stock allocation" msgstr "" -#: build/forms.py:188 +#: build/forms.py:189 msgid "Mark build as complete" msgstr "" -#: build/forms.py:212 +#: build/forms.py:213 build/templates/build/auto_allocate.html:18 +#: order/forms.py:82 stock/forms.py:347 +#: stock/templates/stock/item_base.html:270 +#: 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 +msgid "Location" +msgstr "" + +#: build/forms.py:214 msgid "Location of completed parts" msgstr "" -#: build/forms.py:217 -msgid "Confirm completion with incomplete stock allocation" +#: build/forms.py:219 +msgid "Confirm incomplete" msgstr "" #: build/forms.py:220 +msgid "Confirm completion with incomplete stock allocation" +msgstr "" + +#: build/forms.py:223 msgid "Confirm build completion" msgstr "" -#: build/forms.py:240 build/views.py:66 +#: build/forms.py:243 +msgid "Confirm cancel" +msgstr "" + +#: build/forms.py:243 build/views.py:66 msgid "Confirm build cancellation" msgstr "" -#: build/forms.py:254 +#: build/forms.py:257 msgid "Select quantity of stock to allocate" msgstr "" @@ -462,7 +503,9 @@ msgstr "" msgid "Build Order Reference" msgstr "" -#: build/models.py:127 order/templates/order/purchase_order_detail.html:188 +#: build/models.py:127 order/models.py:99 order/models.py:595 +#: order/templates/order/purchase_order_detail.html:188 +#: order/templates/order/sales_order_detail.html:219 part/models.py:2167 #: report/templates/report/inventree_po_report.html:92 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197 #: templates/js/build.js:509 templates/js/build.js:948 @@ -484,11 +527,15 @@ 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 order/models.py:662 +#: build/templates/build/detail.html:26 company/models.py:535 +#: 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 -#: order/templates/order/receive_parts.html:19 part/models.py:321 -#: part/models.py:2054 part/templates/part/part_app_base.html:7 +#: order/templates/order/receive_parts.html:19 +#: order/templates/order/sales_order_detail.html:207 part/models.py:321 +#: part/models.py:1856 part/models.py:1868 part/models.py:1886 +#: part/models.py:1961 part/models.py:2057 part/models.py:2142 +#: part/templates/part/part_app_base.html:7 #: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29 #: part/templates/part/set_category.html:13 #: part/templates/part/subcategories.html:17 @@ -558,7 +605,7 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:212 stock/models.py:429 +#: build/models.py:212 stock/models.py:430 msgid "Batch Code" msgstr "" @@ -566,11 +613,16 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:223 order/models.py:447 +#: build/models.py:219 order/models.py:105 part/models.py:882 +#: part/templates/part/detail.html:126 templates/js/order.js:293 +msgid "Creation Date" +msgstr "" + +#: build/models.py:223 order/models.py:451 msgid "Target completion date" msgstr "" -#: build/models.py:227 order/models.py:215 +#: build/models.py:227 order/models.py:218 msgid "Completion Date" msgstr "" @@ -587,9 +639,9 @@ msgid "User who issued this build order" msgstr "" #: build/models.py:250 build/templates/build/build_base.html:142 -#: build/templates/build/detail.html:105 order/models.py:118 +#: build/templates/build/detail.html:105 order/models.py:119 #: order/templates/order/order_base.html:138 -#: order/templates/order/sales_order_base.html:138 part/models.py:885 +#: order/templates/order/sales_order_base.html:138 part/models.py:886 #: report/templates/report/inventree_build_order_base.html:159 msgid "Responsible" msgstr "" @@ -602,26 +654,28 @@ msgstr "" #: company/templates/company/supplier_part_base.html:77 #: company/templates/company/supplier_part_detail.html:28 #: part/templates/part/detail.html:83 part/templates/part/part_base.html:100 -#: stock/models.py:423 stock/templates/stock/item_base.html:330 +#: stock/models.py:424 stock/templates/stock/item_base.html:330 msgid "External Link" msgstr "" -#: build/models.py:257 part/models.py:744 stock/models.py:425 +#: build/models.py:257 part/models.py:744 stock/models.py:426 msgid "Link to external URL" msgstr "" #: build/models.py:261 build/templates/build/navbar.html:59 -#: company/models.py:366 company/templates/company/navbar.html:59 -#: company/templates/company/navbar.html:62 -#: order/templates/order/po_navbar.html:29 +#: company/models.py:129 company/models.py:368 +#: 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 #: order/templates/order/po_navbar.html:32 #: order/templates/order/purchase_order_detail.html:227 +#: order/templates/order/sales_order_detail.html:264 #: order/templates/order/so_navbar.html:33 -#: order/templates/order/so_navbar.html:36 part/models.py:870 +#: order/templates/order/so_navbar.html:36 part/models.py:871 #: part/templates/part/navbar.html:122 #: report/templates/report/inventree_build_order_base.html:173 -#: stock/forms.py:316 stock/forms.py:348 stock/forms.py:376 stock/models.py:495 -#: stock/models.py:1553 stock/models.py:1663 +#: 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 msgid "Notes" @@ -665,11 +719,11 @@ msgstr "" msgid "Allocated quantity ({n}) must not exceed available quantity ({q})" msgstr "" -#: build/models.py:1034 order/models.py:751 +#: build/models.py:1034 order/models.py:758 msgid "StockItem is over-allocated" msgstr "" -#: build/models.py:1038 order/models.py:754 +#: build/models.py:1038 order/models.py:761 msgid "Allocation quantity must be greater than zero" msgstr "" @@ -677,19 +731,41 @@ msgstr "" msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1082 +#: build/models.py:1082 stock/templates/stock/item_base.html:302 +#: templates/InvenTree/search.html:167 templates/js/build.js:655 +#: templates/navbar.html:29 +msgid "Build" +msgstr "" + +#: build/models.py:1083 msgid "Build to allocate parts" msgstr "" -#: build/models.py:1089 +#: build/models.py:1090 part/templates/part/allocation.html:18 +#: part/templates/part/allocation.html:24 +#: part/templates/part/allocation.html:31 +#: part/templates/part/allocation.html:49 +#: stock/templates/stock/item_base.html:8 +#: 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 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1091 msgid "Source stock item" msgstr "" -#: build/models.py:1101 +#: build/models.py:1104 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1109 +#: build/models.py:1112 +msgid "Install into" +msgstr "" + +#: build/models.py:1113 msgid "Destination stock item" msgstr "" @@ -757,15 +833,6 @@ msgid "" "The following stock items will be allocated to the specified build output" msgstr "" -#: build/templates/build/auto_allocate.html:18 stock/forms.py:346 -#: stock/templates/stock/item_base.html:270 -#: 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 -msgid "Location" -msgstr "" - #: build/templates/build/auto_allocate.html:37 msgid "No stock items found that can be automatically allocated to this build" msgstr "" @@ -836,7 +903,7 @@ msgid "Build Details" msgstr "" #: build/templates/build/build_base.html:96 -#: build/templates/build/detail.html:59 +#: build/templates/build/detail.html:59 order/models.py:445 #: order/templates/order/receive_parts.html:24 #: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236 #: templates/js/barcode.js:119 templates/js/build.js:710 @@ -855,7 +922,7 @@ msgid "Progress" msgstr "" #: build/templates/build/build_base.html:128 -#: build/templates/build/detail.html:84 order/models.py:660 +#: build/templates/build/detail.html:84 order/models.py:667 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:33 #: order/templates/order/sales_order_ship.html:25 @@ -966,7 +1033,7 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:46 stock/forms.py:374 +#: build/templates/build/detail.html:46 stock/forms.py:169 stock/forms.py:375 msgid "Destination" msgstr "" @@ -1099,7 +1166,7 @@ msgstr "" msgid "Create Build Output" msgstr "" -#: build/views.py:203 stock/models.py:964 stock/views.py:1788 +#: build/views.py:203 stock/models.py:966 stock/views.py:1789 msgid "Serial numbers already exist" msgstr "" @@ -1237,7 +1304,7 @@ msgstr "" msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:62 company/models.py:95 company/models.py:96 +#: common/models.py:62 company/models.py:96 company/models.py:97 msgid "Company name" msgstr "" @@ -1341,8 +1408,8 @@ msgstr "" msgid "Number of recent parts to display on index page" msgstr "" -#: common/models.py:150 part/models.py:2056 part/templates/part/detail.html:160 -#: report/models.py:185 stock/forms.py:258 templates/js/table_filters.js:24 +#: common/models.py:150 part/models.py:2059 part/templates/part/detail.html:160 +#: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24 #: templates/js/table_filters.js:288 msgid "Template" msgstr "" @@ -1351,7 +1418,7 @@ msgstr "" msgid "Parts are templates by default" msgstr "" -#: common/models.py:157 part/models.py:833 part/templates/part/detail.html:170 +#: common/models.py:157 part/models.py:834 part/templates/part/detail.html:170 #: templates/js/table_filters.js:101 templates/js/table_filters.js:300 msgid "Assembly" msgstr "" @@ -1360,7 +1427,7 @@ msgstr "" msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:164 part/models.py:839 part/templates/part/detail.html:180 +#: common/models.py:164 part/models.py:840 part/templates/part/detail.html:180 #: templates/js/table_filters.js:304 msgid "Component" msgstr "" @@ -1369,7 +1436,7 @@ msgstr "" msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:171 part/models.py:850 part/templates/part/detail.html:200 +#: common/models.py:171 part/models.py:851 part/templates/part/detail.html:200 msgid "Purchaseable" msgstr "" @@ -1377,7 +1444,7 @@ msgstr "" msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:178 part/models.py:855 part/templates/part/detail.html:210 +#: common/models.py:178 part/models.py:856 part/templates/part/detail.html:210 #: templates/js/table_filters.js:312 msgid "Salable" msgstr "" @@ -1386,7 +1453,7 @@ msgstr "" msgid "Parts are salable by default" msgstr "" -#: common/models.py:185 part/models.py:845 part/templates/part/detail.html:190 +#: common/models.py:185 part/models.py:846 part/templates/part/detail.html:190 #: templates/js/table_filters.js:32 templates/js/table_filters.js:316 msgid "Trackable" msgstr "" @@ -1395,7 +1462,7 @@ msgstr "" msgid "Parts are trackable by default" msgstr "" -#: common/models.py:192 part/models.py:865 part/templates/part/detail.html:150 +#: common/models.py:192 part/models.py:866 part/templates/part/detail.html:150 #: templates/js/table_filters.js:28 msgid "Virtual" msgstr "" @@ -1585,12 +1652,12 @@ msgstr "" msgid "Supplied value must be a boolean" msgstr "" -#: company/forms.py:37 company/models.py:137 +#: company/forms.py:37 company/models.py:139 #: company/templates/company/detail.html:40 msgid "Currency" msgstr "" -#: company/forms.py:38 company/models.py:139 +#: company/forms.py:38 company/models.py:141 msgid "Default currency used for this company" msgstr "" @@ -1610,95 +1677,106 @@ msgstr "" msgid "Single quantity price" msgstr "" -#: company/models.py:98 +#: company/models.py:99 msgid "Company description" msgstr "" -#: company/models.py:98 +#: company/models.py:99 msgid "Description of the company" msgstr "" -#: company/models.py:100 company/templates/company/company_base.html:70 +#: company/models.py:101 company/templates/company/company_base.html:70 #: company/templates/company/detail.html:31 templates/js/company.js:60 msgid "Website" msgstr "" -#: company/models.py:100 +#: company/models.py:101 msgid "Company website URL" msgstr "" -#: company/models.py:103 company/templates/company/company_base.html:77 +#: company/models.py:104 company/templates/company/company_base.html:77 msgid "Address" msgstr "" -#: company/models.py:104 +#: company/models.py:105 msgid "Company address" msgstr "" -#: company/models.py:107 +#: company/models.py:108 msgid "Phone number" msgstr "" -#: company/models.py:108 +#: company/models.py:109 msgid "Contact phone number" msgstr "" -#: company/models.py:111 company/templates/company/company_base.html:91 +#: company/models.py:112 company/templates/company/company_base.html:91 msgid "Email" msgstr "" -#: company/models.py:111 +#: company/models.py:112 msgid "Contact email address" msgstr "" -#: company/models.py:114 company/templates/company/company_base.html:98 +#: company/models.py:115 company/templates/company/company_base.html:98 msgid "Contact" msgstr "" -#: company/models.py:115 +#: company/models.py:116 msgid "Point of contact" msgstr "" -#: company/models.py:117 +#: company/models.py:118 company/models.py:355 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 msgid "Link to external company information" msgstr "" -#: company/models.py:129 +#: company/models.py:126 part/models.py:753 +msgid "Image" +msgstr "" + +#: company/models.py:131 msgid "is customer" msgstr "" -#: company/models.py:129 +#: company/models.py:131 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:131 +#: company/models.py:133 msgid "is supplier" msgstr "" -#: company/models.py:131 +#: company/models.py:133 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:133 +#: company/models.py:135 msgid "is manufacturer" msgstr "" -#: company/models.py:133 +#: company/models.py:135 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:313 stock/models.py:370 +#: company/models.py:315 stock/models.py:371 #: stock/templates/stock/item_base.html:220 msgid "Base Part" msgstr "" -#: company/models.py:317 order/views.py:1372 +#: company/models.py:319 order/views.py:1372 msgid "Select part" msgstr "" -#: company/models.py:323 company/templates/company/detail.html:60 +#: company/models.py:325 company/templates/company/detail.html:60 #: company/templates/company/supplier_part_base.html:83 -#: company/templates/company/supplier_part_detail.html:25 +#: company/templates/company/supplier_part_detail.html:25 order/models.py:190 #: order/templates/order/order_base.html:92 #: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170 #: stock/templates/stock/item_base.html:337 templates/js/company.js:48 @@ -1706,81 +1784,83 @@ msgstr "" msgid "Supplier" msgstr "" -#: company/models.py:324 +#: company/models.py:326 msgid "Select supplier" msgstr "" -#: company/models.py:329 company/templates/company/supplier_part_base.html:87 +#: company/models.py:331 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:330 +#: company/models.py:332 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:340 company/templates/company/detail.html:55 +#: company/models.py:342 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:341 +#: company/models.py:343 msgid "Select manufacturer" msgstr "" -#: company/models.py:347 company/templates/company/supplier_part_base.html:99 +#: company/models.py:349 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:348 +#: company/models.py:350 msgid "Manufacturer part number" msgstr "" -#: company/models.py:353 part/models.py:743 -#: report/templates/report/inventree_build_order_base.html:165 -#: stock/models.py:1555 templates/js/company.js:208 templates/js/part.js:430 -msgid "Link" -msgstr "" - -#: company/models.py:354 +#: company/models.py:356 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:360 +#: company/models.py:362 msgid "Supplier part description" msgstr "" -#: company/models.py:365 company/templates/company/supplier_part_base.html:113 -#: company/templates/company/supplier_part_detail.html:38 +#: company/models.py:367 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:369 +#: company/models.py:371 +msgid "base cost" +msgstr "" + +#: company/models.py:371 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:371 company/templates/company/supplier_part_base.html:106 -#: stock/models.py:394 stock/templates/stock/item_base.html:295 +#: company/models.py:373 company/templates/company/supplier_part_base.html:106 +#: stock/models.py:395 stock/templates/stock/item_base.html:295 #: templates/js/stock.js:663 msgid "Packaging" msgstr "" -#: company/models.py:371 +#: company/models.py:373 msgid "Part packaging" msgstr "" -#: company/models.py:373 +#: company/models.py:375 msgid "multiple" msgstr "" +#: company/models.py:375 +msgid "Order multiple" +msgstr "" + #: company/templates/company/assigned_stock.html:10 #: company/templates/company/navbar.html:51 #: company/templates/company/navbar.html:54 templates/js/build.js:411 @@ -1825,6 +1905,19 @@ msgstr "" msgid "Phone" msgstr "" +#: company/templates/company/delete.html:7 +#, python-format +msgid "Are you sure you want to delete company '%(name)s'?" +msgstr "" + +#: company/templates/company/delete.html:12 +#, python-format +msgid "" +"There are %(count)s parts sourced from this company.<br>\n" +"If this supplier is deleted, these supplier part entries will also be " +"deleted." +msgstr "" + #: company/templates/company/detail.html:21 msgid "Company Name" msgstr "" @@ -1837,9 +1930,9 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/detail.html:65 -#: order/templates/order/sales_order_base.html:92 stock/models.py:412 -#: stock/models.py:413 stock/templates/stock/item_base.html:247 +#: company/templates/company/detail.html:65 order/models.py:440 +#: order/templates/order/sales_order_base.html:92 stock/models.py:413 +#: stock/models.py:414 stock/templates/stock/item_base.html:247 #: templates/js/company.js:40 templates/js/order.js:267 msgid "Customer" msgstr "" @@ -1850,6 +1943,7 @@ msgid "Supplier Parts" msgstr "" #: company/templates/company/detail_part.html:20 +#: order/templates/order/order_wizard/select_parts.html:42 #: order/templates/order/purchase_order_detail.html:75 msgid "Create new supplier part" msgstr "" @@ -1889,13 +1983,13 @@ msgid "Create new Part" msgstr "" #: company/templates/company/detail_part.html:72 company/views.py:62 -#: order/templates/order/purchase_orders.html:182 +#: order/templates/order/purchase_orders.html:183 #: part/templates/part/supplier.html:50 msgid "New Supplier" msgstr "" #: company/templates/company/detail_part.html:73 company/views.py:279 -#: order/templates/order/purchase_orders.html:183 +#: order/templates/order/purchase_orders.html:184 msgid "Create new Supplier" msgstr "" @@ -2035,7 +2129,7 @@ msgid "New Sales Order" msgstr "" #: company/templates/company/supplier_part_base.html:6 -#: company/templates/company/supplier_part_base.html:19 stock/models.py:379 +#: company/templates/company/supplier_part_base.html:19 stock/models.py:380 #: stock/templates/stock/item_base.html:342 templates/js/company.js:180 msgid "Supplier Part" msgstr "" @@ -2109,7 +2203,7 @@ msgstr "" msgid "Customers" msgstr "" -#: company/views.py:76 order/templates/order/sales_orders.html:184 +#: company/views.py:76 order/templates/order/sales_orders.html:185 msgid "New Customer" msgstr "" @@ -2149,7 +2243,7 @@ msgstr "" msgid "Edited company information" msgstr "" -#: company/views.py:285 order/templates/order/sales_orders.html:185 +#: company/views.py:285 order/templates/order/sales_orders.html:186 msgid "Create new Customer" msgstr "" @@ -2201,7 +2295,7 @@ msgstr "" msgid "Label description" msgstr "" -#: label/models.py:116 stock/forms.py:201 +#: label/models.py:116 stock/forms.py:202 msgid "Label" msgstr "" @@ -2217,6 +2311,10 @@ msgstr "" msgid "Label template is enabled" msgstr "" +#: label/models.py:129 +msgid "Width [mm]" +msgstr "" + #: label/models.py:130 msgid "Label width, specified in mm" msgstr "" @@ -2263,24 +2361,24 @@ msgstr "" msgid "Purchase Order reference" msgstr "" -#: order/forms.py:109 +#: order/forms.py:110 msgid "Target date for order delivery. Order will be overdue after this date." msgstr "" -#: order/forms.py:137 +#: order/forms.py:138 msgid "Enter sales order number" msgstr "" -#: order/forms.py:143 order/models.py:448 +#: order/forms.py:145 order/models.py:452 msgid "" "Target date for order completion. Order will be overdue after this date." msgstr "" -#: order/forms.py:233 +#: order/forms.py:235 msgid "Enter stock item serial numbers" msgstr "" -#: order/forms.py:239 +#: order/forms.py:241 msgid "Enter quantity of stock items" msgstr "" @@ -2296,137 +2394,183 @@ msgstr "" msgid "Link to external page" msgstr "" -#: order/models.py:117 +#: order/models.py:111 part/templates/part/detail.html:132 +msgid "Created By" +msgstr "" + +#: order/models.py:118 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:122 +#: order/models.py:123 msgid "Order notes" msgstr "" -#: order/models.py:181 order/models.py:441 +#: order/models.py:182 order/models.py:445 msgid "Purchase order status" msgstr "" -#: order/models.py:189 +#: order/models.py:191 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:192 +#: order/models.py:194 order/templates/order/order_base.html:98 +#: templates/js/order.js:179 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:194 msgid "Supplier order reference code" msgstr "" -#: order/models.py:203 +#: order/models.py:201 +msgid "received by" +msgstr "" + +#: order/models.py:206 msgid "Issue Date" msgstr "" -#: order/models.py:204 +#: order/models.py:207 msgid "Date order was issued" msgstr "" -#: order/models.py:209 +#: order/models.py:212 msgid "Target Delivery Date" msgstr "" -#: order/models.py:210 +#: order/models.py:213 msgid "" "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:216 +#: order/models.py:219 msgid "Date order was completed" msgstr "" -#: order/models.py:240 order/models.py:339 part/views.py:1586 -#: stock/models.py:269 stock/models.py:948 +#: order/models.py:243 order/models.py:342 part/views.py:1586 +#: stock/models.py:270 stock/models.py:950 msgid "Quantity must be greater than zero" msgstr "" -#: order/models.py:245 +#: order/models.py:248 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:334 +#: order/models.py:337 msgid "Lines can only be received against an order marked as 'Placed'" msgstr "" -#: order/models.py:356 +#: order/models.py:359 msgid "Received items" msgstr "" -#: order/models.py:437 +#: order/models.py:441 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:443 +#: order/models.py:447 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:447 msgid "Customer order reference code" msgstr "" -#: order/models.py:501 +#: order/models.py:455 templates/js/order.js:303 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:462 +msgid "shipped by" +msgstr "" + +#: order/models.py:506 msgid "SalesOrder cannot be shipped as it is not currently pending" msgstr "" -#: order/models.py:588 +#: order/models.py:593 msgid "Item quantity" msgstr "" -#: order/models.py:590 +#: order/models.py:595 msgid "Line item reference" msgstr "" -#: order/models.py:592 +#: order/models.py:597 msgid "Line item notes" msgstr "" -#: order/models.py:618 order/templates/order/order_base.html:9 +#: order/models.py:623 order/models.py:667 +#: part/templates/part/allocation.html:17 +#: part/templates/part/allocation.html:45 +msgid "Order" +msgstr "" + +#: order/models.py:624 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:24 #: report/templates/report/inventree_po_report.html:77 #: stock/templates/stock/item_base.html:309 templates/js/order.js:148 msgid "Purchase Order" msgstr "" -#: order/models.py:631 +#: order/models.py:638 msgid "Supplier part" msgstr "" -#: order/models.py:634 +#: order/models.py:641 order/templates/order/order_base.html:131 +#: order/templates/order/purchase_order_detail.html:207 +#: order/templates/order/receive_parts.html:22 +#: order/templates/order/sales_order_base.html:131 +msgid "Received" +msgstr "" + +#: order/models.py:641 msgid "Number of items received" msgstr "" -#: order/models.py:641 stock/models.py:505 +#: order/models.py:648 stock/models.py:506 #: stock/templates/stock/item_base.html:316 msgid "Purchase Price" msgstr "" -#: order/models.py:642 +#: order/models.py:649 msgid "Unit purchase price" msgstr "" -#: order/models.py:736 order/models.py:738 +#: order/models.py:743 order/models.py:745 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:742 +#: order/models.py:749 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:744 +#: order/models.py:751 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:747 +#: order/models.py:754 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:757 +#: order/models.py:764 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:773 +#: order/models.py:769 +msgid "Line" +msgstr "" + +#: order/models.py:780 +msgid "Item" +msgstr "" + +#: order/models.py:781 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:776 +#: order/models.py:784 msgid "Enter stock allocation quantity" msgstr "" @@ -2469,27 +2613,25 @@ msgstr "" msgid "Order Status" msgstr "" -#: order/templates/order/order_base.html:98 templates/js/order.js:179 -msgid "Supplier Reference" -msgstr "" - #: order/templates/order/order_base.html:117 #: report/templates/report/inventree_build_order_base.html:122 msgid "Issued" msgstr "" -#: order/templates/order/order_base.html:131 -#: order/templates/order/purchase_order_detail.html:207 -#: order/templates/order/receive_parts.html:22 -#: order/templates/order/sales_order_base.html:131 -msgid "Received" -msgstr "" - #: order/templates/order/order_cancel.html:7 #: order/templates/order/sales_order_cancel.html:9 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" +#: order/templates/order/order_complete.html:7 +msgid "Mark this order as complete?" +msgstr "" + +#: order/templates/order/order_issue.html:7 +msgid "" +"After placing this purchase order, line items will no longer be editable." +msgstr "" + #: order/templates/order/order_notes.html:13 msgid "Order Notes" msgstr "" @@ -2668,11 +2810,16 @@ msgstr "" #: order/templates/order/sales_order_detail.html:75 #: order/templates/order/sales_order_detail.html:157 #: report/templates/report/inventree_test_report_base.html:75 -#: stock/models.py:417 stock/templates/stock/item_base.html:234 +#: stock/models.py:418 stock/templates/stock/item_base.html:234 #: templates/js/build.js:418 msgid "Serial Number" msgstr "" +#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:338 +#: templates/js/build.js:571 templates/js/build.js:984 +msgid "Actions" +msgstr "" + #: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459 #: templates/js/build.js:789 msgid "Edit stock allocation" @@ -2683,8 +2830,16 @@ msgstr "" msgid "Delete stock allocation" msgstr "" -#: order/templates/order/sales_order_detail.html:229 order/views.py:1351 -#: templates/js/build.js:523 templates/js/build.js:785 +#: order/templates/order/sales_order_detail.html:170 +msgid "No matching line items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:199 +msgid "ID" +msgstr "" + +#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 +#: templates/js/build.js:785 msgid "Allocated" msgstr "" @@ -2852,6 +3007,11 @@ msgstr "" msgid "No lines specified" msgstr "" +#: order/views.py:1060 +#, python-brace-format +msgid "Ordered {n} parts" +msgstr "" + #: order/views.py:1117 msgid "Supplier part must be specified" msgstr "" @@ -2877,7 +3037,8 @@ msgid "Allocate Serial Numbers" msgstr "" #: order/views.py:1351 -msgid "items" +#, python-brace-format +msgid "Allocated {n} items" msgstr "" #: order/views.py:1367 @@ -2908,7 +3069,7 @@ msgstr "" msgid "Remove allocation" msgstr "" -#: part/bom.py:138 part/models.py:72 part/models.py:761 +#: part/bom.py:138 part/models.py:72 part/models.py:762 #: part/templates/part/category.html:62 part/templates/part/detail.html:90 msgid "Default Location" msgstr "" @@ -2930,11 +3091,11 @@ msgstr "" msgid "Error reading BOM file (incorrect row size)" msgstr "" -#: part/forms.py:89 stock/forms.py:264 +#: part/forms.py:89 stock/forms.py:265 msgid "File Format" msgstr "" -#: part/forms.py:89 stock/forms.py:264 +#: part/forms.py:89 stock/forms.py:265 msgid "Select output file format" msgstr "" @@ -2978,7 +3139,7 @@ msgstr "" msgid "Include part supplier data in exported BOM" msgstr "" -#: part/forms.py:120 part/models.py:2054 +#: part/forms.py:120 part/models.py:2057 msgid "Parent Part" msgstr "" @@ -2990,63 +3151,75 @@ msgstr "" msgid "Clear existing BOM items" msgstr "" -#: part/forms.py:132 +#: part/forms.py:133 msgid "Confirm BOM duplication" msgstr "" -#: part/forms.py:150 +#: part/forms.py:151 +msgid "validate" +msgstr "" + +#: part/forms.py:151 msgid "Confirm that the BOM is correct" msgstr "" -#: part/forms.py:162 +#: part/forms.py:163 +msgid "BOM file" +msgstr "" + +#: part/forms.py:163 msgid "Select BOM file to upload" msgstr "" -#: part/forms.py:181 +#: part/forms.py:182 msgid "Related Part" msgstr "" -#: part/forms.py:200 +#: part/forms.py:201 msgid "Select part category" msgstr "" -#: part/forms.py:217 +#: part/forms.py:218 msgid "Duplicate all BOM data for this part" msgstr "" -#: part/forms.py:218 +#: part/forms.py:219 msgid "Copy BOM" msgstr "" -#: part/forms.py:223 +#: part/forms.py:224 msgid "Duplicate all parameter data for this part" msgstr "" -#: part/forms.py:224 +#: part/forms.py:225 msgid "Copy Parameters" msgstr "" -#: part/forms.py:229 +#: part/forms.py:230 msgid "Confirm part creation" msgstr "" -#: part/forms.py:234 +#: part/forms.py:235 msgid "Include category parameter templates" msgstr "" -#: part/forms.py:239 +#: part/forms.py:240 msgid "Include parent categories parameter templates" msgstr "" -#: part/forms.py:319 +#: part/forms.py:320 msgid "Add parameter template to same level categories" msgstr "" -#: part/forms.py:323 +#: part/forms.py:324 msgid "Add parameter template to all categories" msgstr "" -#: part/forms.py:368 +#: part/forms.py:342 part/models.py:2151 +msgid "Sub part" +msgstr "" + +#: part/forms.py:370 msgid "Input quantity for price calculation" msgstr "" @@ -3062,7 +3235,7 @@ msgstr "" msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:82 part/models.py:2099 +#: part/models.py:82 part/models.py:2103 #: part/templates/part/part_app_base.html:9 msgid "Part Category" msgstr "" @@ -3132,7 +3305,7 @@ msgstr "" msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:724 part/templates/part/detail.html:73 +#: part/models.py:724 part/models.py:2102 part/templates/part/detail.html:73 #: part/templates/part/set_category.html:15 templates/js/part.js:384 msgid "Category" msgstr "" @@ -3159,243 +3332,262 @@ msgstr "" msgid "Revision" msgstr "" -#: part/models.py:759 +#: part/models.py:760 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:806 part/templates/part/detail.html:97 +#: part/models.py:807 part/templates/part/detail.html:97 msgid "Default Supplier" msgstr "" -#: part/models.py:807 +#: part/models.py:808 msgid "Default supplier part" msgstr "" -#: part/models.py:814 +#: part/models.py:815 msgid "Default Expiry" msgstr "" -#: part/models.py:815 +#: part/models.py:816 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:820 part/templates/part/detail.html:113 +#: part/models.py:821 part/templates/part/detail.html:113 msgid "Minimum Stock" msgstr "" -#: part/models.py:821 +#: part/models.py:822 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:827 part/templates/part/detail.html:106 +#: part/models.py:828 part/models.py:2031 part/templates/part/detail.html:106 #: part/templates/part/params.html:29 msgid "Units" msgstr "" -#: part/models.py:828 +#: part/models.py:829 msgid "Stock keeping units for this part" msgstr "" -#: part/models.py:834 +#: part/models.py:835 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:840 +#: part/models.py:841 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:846 +#: part/models.py:847 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:851 +#: part/models.py:852 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:856 +#: part/models.py:857 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:860 part/templates/part/detail.html:227 +#: part/models.py:861 part/templates/part/detail.html:227 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60 #: templates/js/table_filters.js:214 templates/js/table_filters.js:283 msgid "Active" msgstr "" -#: part/models.py:861 +#: part/models.py:862 msgid "Is this part active?" msgstr "" -#: part/models.py:866 +#: part/models.py:867 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:871 +#: part/models.py:872 msgid "Part notes - supports Markdown formatting" msgstr "" -#: part/models.py:874 +#: part/models.py:875 msgid "BOM checksum" msgstr "" -#: part/models.py:874 +#: part/models.py:875 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:877 +#: part/models.py:878 msgid "BOM checked by" msgstr "" -#: part/models.py:879 +#: part/models.py:880 msgid "BOM checked date" msgstr "" -#: part/models.py:881 part/templates/part/detail.html:126 -#: templates/js/order.js:293 -msgid "Creation Date" -msgstr "" - -#: part/models.py:883 +#: part/models.py:884 msgid "Creation User" msgstr "" -#: part/models.py:1927 +#: part/models.py:1929 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:1944 +#: part/models.py:1946 msgid "Test with this name already exists for this part" msgstr "" -#: part/models.py:1963 templates/js/part.js:561 templates/js/stock.js:104 +#: part/models.py:1966 templates/js/part.js:561 templates/js/stock.js:104 msgid "Test Name" msgstr "" -#: part/models.py:1964 +#: part/models.py:1967 msgid "Enter a name for the test" msgstr "" -#: part/models.py:1969 +#: part/models.py:1972 msgid "Test Description" msgstr "" -#: part/models.py:1970 +#: part/models.py:1973 msgid "Enter description for this test" msgstr "" -#: part/models.py:1975 templates/js/part.js:570 +#: part/models.py:1978 templates/js/part.js:570 #: templates/js/table_filters.js:200 msgid "Required" msgstr "" -#: part/models.py:1976 +#: part/models.py:1979 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:1981 templates/js/part.js:578 +#: part/models.py:1984 templates/js/part.js:578 msgid "Requires Value" msgstr "" -#: part/models.py:1982 +#: part/models.py:1985 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:1987 templates/js/part.js:585 +#: part/models.py:1990 templates/js/part.js:585 msgid "Requires Attachment" msgstr "" -#: part/models.py:1988 +#: part/models.py:1991 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:2021 +#: part/models.py:2024 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:2026 +#: part/models.py:2029 msgid "Parameter Name" msgstr "" -#: part/models.py:2028 +#: part/models.py:2031 msgid "Parameter Units" msgstr "" -#: part/models.py:2056 part/models.py:2104 +#: part/models.py:2059 part/models.py:2108 part/models.py:2109 #: templates/InvenTree/settings/category.html:62 msgid "Parameter Template" msgstr "" -#: part/models.py:2058 +#: part/models.py:2061 msgid "Data" msgstr "" -#: part/models.py:2058 +#: part/models.py:2061 msgid "Parameter Value" msgstr "" -#: part/models.py:2108 +#: part/models.py:2113 templates/InvenTree/settings/category.html:67 +msgid "Default Value" +msgstr "" + +#: part/models.py:2114 msgid "Default Parameter Value" msgstr "" -#: part/models.py:2136 +#: part/models.py:2143 msgid "Select parent part" msgstr "" -#: part/models.py:2144 +#: part/models.py:2152 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:2150 +#: part/models.py:2158 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:2152 +#: part/models.py:2160 templates/js/bom.js:216 templates/js/bom.js:269 +msgid "Optional" +msgstr "" + +#: part/models.py:2160 msgid "This BOM item is optional" msgstr "" -#: part/models.py:2155 +#: part/models.py:2163 +msgid "Overage" +msgstr "" + +#: part/models.py:2164 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:2158 +#: part/models.py:2167 msgid "BOM item reference" msgstr "" -#: part/models.py:2161 +#: part/models.py:2170 msgid "BOM item notes" msgstr "" -#: part/models.py:2163 +#: part/models.py:2172 +msgid "Checksum" +msgstr "" + +#: part/models.py:2172 msgid "BOM line checksum" msgstr "" -#: part/models.py:2167 templates/js/bom.js:275 templates/js/bom.js:282 +#: part/models.py:2176 templates/js/bom.js:275 templates/js/bom.js:282 #: templates/js/table_filters.js:50 msgid "Inherited" msgstr "" -#: part/models.py:2168 +#: part/models.py:2177 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:2244 part/views.py:1592 part/views.py:1644 -#: stock/models.py:259 +#: part/models.py:2253 part/views.py:1592 part/views.py:1644 +#: stock/models.py:260 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:2253 part/models.py:2255 +#: part/models.py:2262 part/models.py:2264 msgid "Sub part must be specified" msgstr "" -#: part/models.py:2258 +#: part/models.py:2267 msgid "BOM Item" msgstr "" -#: part/models.py:2379 +#: part/models.py:2384 +msgid "Part 1" +msgstr "" + +#: part/models.py:2388 +msgid "Part 2" +msgstr "" + +#: part/models.py:2388 msgid "Select Related Part" msgstr "" -#: part/models.py:2411 +#: part/models.py:2420 msgid "" "Error creating relationship: check that the part is not related to itself " "and that the relationship is unique" @@ -3405,23 +3597,6 @@ msgstr "" msgid "Part Stock Allocations" msgstr "" -#: part/templates/part/allocation.html:17 -#: part/templates/part/allocation.html:45 -msgid "Order" -msgstr "" - -#: part/templates/part/allocation.html:18 -#: part/templates/part/allocation.html:24 -#: part/templates/part/allocation.html:31 -#: part/templates/part/allocation.html:49 -#: stock/templates/stock/item_base.html:8 -#: 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 -msgid "Stock Item" -msgstr "" - #: part/templates/part/attachments.html:10 msgid "Part Attachments" msgstr "" @@ -3439,6 +3614,22 @@ msgstr "" msgid "Bill of Materials" msgstr "" +#: part/templates/part/bom.html:19 +#, python-format +msgid "The BOM for <i>%(part)s</i> has changed, and must be validated.<br>" +msgstr "" + +#: part/templates/part/bom.html:21 +#, python-format +msgid "" +"The BOM for <i>%(part)s</i> was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:25 +#, python-format +msgid "The BOM for <i>%(part)s</i> has not been validated." +msgstr "" + #: part/templates/part/bom.html:32 msgid "Remove selected BOM items" msgstr "" @@ -3578,6 +3769,20 @@ msgstr "" msgid "Each part must already exist in the database" msgstr "" +#: part/templates/part/bom_upload/upload_file.html:27 +msgid "Upload File" +msgstr "" + +#: part/templates/part/bom_validate.html:6 +#, python-format +msgid "" +"Confirm that the Bill of Materials (BOM) is valid for:<br><i>%(part)s</i>" +msgstr "" + +#: part/templates/part/bom_validate.html:9 +msgid "This will validate each line in the BOM." +msgstr "" + #: part/templates/part/build.html:10 msgid "Part Builds" msgstr "" @@ -3655,7 +3860,7 @@ msgstr "" msgid "Create new Part Category" msgstr "" -#: part/templates/part/category.html:240 stock/views.py:1358 +#: part/templates/part/category.html:240 stock/views.py:1359 msgid "Create new Stock Location" msgstr "" @@ -3749,10 +3954,6 @@ msgstr "" msgid "Stock Expiry Time" msgstr "" -#: part/templates/part/detail.html:132 -msgid "Created By" -msgstr "" - #: part/templates/part/detail.html:139 msgid "Responsible User" msgstr "" @@ -3874,7 +4075,7 @@ msgstr "" #: part/templates/part/params.html:28 #: report/templates/report/inventree_test_report_base.html:90 -#: stock/models.py:1650 templates/InvenTree/settings/header.html:8 +#: stock/models.py:1652 templates/InvenTree/settings/header.html:8 #: templates/js/stock.js:124 msgid "Value" msgstr "" @@ -3884,7 +4085,7 @@ msgid "Edit" msgstr "" #: part/templates/part/params.html:44 part/templates/part/related.html:44 -#: part/templates/part/supplier.html:22 users/models.py:175 +#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:175 msgid "Delete" msgstr "" @@ -4376,18 +4577,26 @@ msgid "Sales order query filters" msgstr "" #: report/models.py:500 +msgid "Snippet" +msgstr "" + +#: report/models.py:501 msgid "Report snippet file" msgstr "" -#: report/models.py:504 +#: report/models.py:505 msgid "Snippet file description" msgstr "" -#: report/models.py:539 +#: report/models.py:540 +msgid "Asset" +msgstr "" + +#: report/models.py:541 msgid "Report asset file" msgstr "" -#: report/models.py:542 +#: report/models.py:544 msgid "Asset file description" msgstr "" @@ -4409,12 +4618,12 @@ msgid "Test Results" msgstr "" #: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:1638 +#: stock/models.py:1640 msgid "Test" msgstr "" #: report/templates/report/inventree_test_report_base.html:89 -#: stock/models.py:1644 +#: stock/models.py:1646 msgid "Result" msgstr "" @@ -4431,301 +4640,345 @@ msgstr "" msgid "Fail" msgstr "" -#: stock/forms.py:117 +#: stock/api.py:199 +#, python-brace-format +msgid "Updated stock for {n} items" +msgstr "" + +#: stock/api.py:268 +#, python-brace-format +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 +msgid "Expiry Date" +msgstr "" + +#: stock/forms.py:115 stock/forms.py:407 +msgid "Expiration date for this stock item" +msgstr "" + +#: stock/forms.py:118 msgid "Enter unique serial numbers (or leave blank)" msgstr "" -#: stock/forms.py:202 stock/forms.py:258 -msgid "Select test report template" +#: stock/forms.py:169 +msgid "" +"Destination for serialized stock (by default, will remain in current " +"location)" msgstr "" -#: stock/forms.py:266 -msgid "Include stock items in sub locations" +#: stock/forms.py:171 +msgid "Serial numbers" msgstr "" -#: stock/forms.py:301 -msgid "Stock item to install" +#: stock/forms.py:171 +msgid "Unique serial numbers (must match quantity)" msgstr "" -#: stock/forms.py:308 -msgid "Stock quantity to assign" -msgstr "" - -#: stock/forms.py:336 -msgid "Must not exceed available quantity" -msgstr "" - -#: stock/forms.py:346 -msgid "Destination location for uninstalled items" -msgstr "" - -#: stock/forms.py:348 +#: stock/forms.py:173 stock/forms.py:349 msgid "Add transaction note (optional)" msgstr "" -#: stock/forms.py:350 +#: stock/forms.py:203 stock/forms.py:259 +msgid "Select test report template" +msgstr "" + +#: stock/forms.py:267 templates/js/table_filters.js:111 +msgid "Include sublocations" +msgstr "" + +#: stock/forms.py:267 +msgid "Include stock items in sub locations" +msgstr "" + +#: stock/forms.py:302 +msgid "Stock item to install" +msgstr "" + +#: stock/forms.py:309 +msgid "Stock quantity to assign" +msgstr "" + +#: stock/forms.py:337 +msgid "Must not exceed available quantity" +msgstr "" + +#: stock/forms.py:347 +msgid "Destination location for uninstalled items" +msgstr "" + +#: stock/forms.py:351 msgid "Confirm uninstall" msgstr "" -#: stock/forms.py:350 +#: stock/forms.py:351 msgid "Confirm removal of installed stock items" msgstr "" -#: stock/forms.py:374 +#: stock/forms.py:375 msgid "Destination stock location" msgstr "" -#: stock/forms.py:376 +#: stock/forms.py:377 msgid "Add note (required)" msgstr "" -#: stock/forms.py:380 stock/views.py:852 stock/views.py:1050 +#: stock/forms.py:381 stock/views.py:852 stock/views.py:1051 msgid "Confirm stock adjustment" msgstr "" -#: stock/forms.py:380 +#: stock/forms.py:381 msgid "Confirm movement of stock items" msgstr "" -#: stock/forms.py:382 +#: stock/forms.py:383 msgid "Set Default Location" msgstr "" -#: stock/forms.py:382 +#: stock/forms.py:383 msgid "Set the destination as the default location for selected parts" msgstr "" -#: stock/models.py:204 +#: stock/models.py:54 stock/models.py:511 +msgid "Owner" +msgstr "" + +#: stock/models.py:55 stock/models.py:512 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:205 msgid "Created stock item" msgstr "" -#: stock/models.py:240 +#: stock/models.py:241 msgid "StockItem with this serial number already exists" msgstr "" -#: stock/models.py:276 +#: stock/models.py:277 #, python-brace-format msgid "Part type ('{pf}') must be {pe}" msgstr "" -#: stock/models.py:286 stock/models.py:295 +#: stock/models.py:287 stock/models.py:296 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:287 +#: stock/models.py:288 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:309 +#: stock/models.py:310 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:315 +#: stock/models.py:316 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:322 +#: stock/models.py:323 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:362 +#: stock/models.py:363 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:371 +#: stock/models.py:372 msgid "Base part" msgstr "" -#: stock/models.py:380 +#: stock/models.py:381 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:385 stock/templates/stock/stock_app_base.html:7 +#: stock/models.py:386 stock/templates/stock/stock_app_base.html:7 msgid "Stock Location" msgstr "" -#: stock/models.py:388 +#: stock/models.py:389 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:395 +#: stock/models.py:396 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:400 stock/templates/stock/item_base.html:255 +#: stock/models.py:401 stock/templates/stock/item_base.html:255 msgid "Installed In" msgstr "" -#: stock/models.py:403 +#: stock/models.py:404 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:419 +#: stock/models.py:420 msgid "Serial number for this item" msgstr "" -#: stock/models.py:431 +#: stock/models.py:432 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:435 +#: stock/models.py:436 msgid "Stock Quantity" msgstr "" -#: stock/models.py:444 +#: stock/models.py:445 msgid "Source Build" msgstr "" -#: stock/models.py:446 +#: stock/models.py:447 msgid "Build for this stock item" msgstr "" -#: stock/models.py:457 +#: stock/models.py:458 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:460 +#: stock/models.py:461 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:466 +#: stock/models.py:467 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:472 stock/templates/stock/item_base.html:349 -#: templates/js/stock.js:652 -msgid "Expiry Date" -msgstr "" - -#: stock/models.py:473 +#: stock/models.py:474 msgid "" "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:486 +#: stock/models.py:487 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:487 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:496 stock/templates/stock/item_notes.html:13 +#: stock/models.py:497 stock/templates/stock/item_notes.html:13 #: stock/templates/stock/navbar.html:54 msgid "Stock Item Notes" msgstr "" -#: stock/models.py:506 +#: stock/models.py:507 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:610 +#: stock/models.py:612 msgid "Assigned to Customer" msgstr "" -#: stock/models.py:612 +#: stock/models.py:614 msgid "Manually assigned to customer" msgstr "" -#: stock/models.py:625 +#: stock/models.py:627 msgid "Returned from customer" msgstr "" -#: stock/models.py:627 +#: stock/models.py:629 msgid "Returned to location" msgstr "" -#: stock/models.py:787 +#: stock/models.py:789 msgid "Installed into stock item" msgstr "" -#: stock/models.py:795 +#: stock/models.py:797 msgid "Installed stock item" msgstr "" -#: stock/models.py:819 +#: stock/models.py:821 msgid "Uninstalled stock item" msgstr "" -#: stock/models.py:838 +#: stock/models.py:840 msgid "Uninstalled into location" msgstr "" -#: stock/models.py:939 +#: stock/models.py:941 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:945 +#: stock/models.py:947 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:951 +#: stock/models.py:953 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({n})" msgstr "" -#: stock/models.py:954 +#: stock/models.py:956 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:957 +#: stock/models.py:959 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:989 +#: stock/models.py:991 msgid "Add serial number" msgstr "" -#: stock/models.py:992 +#: stock/models.py:994 #, python-brace-format msgid "Serialized {n} items" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1072 msgid "Split from existing stock" msgstr "" -#: stock/models.py:1108 +#: stock/models.py:1110 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:1551 +#: stock/models.py:1553 msgid "Title" msgstr "" -#: stock/models.py:1551 +#: stock/models.py:1553 msgid "Tracking entry title" msgstr "" -#: stock/models.py:1553 +#: stock/models.py:1555 msgid "Entry notes" msgstr "" -#: stock/models.py:1555 +#: stock/models.py:1557 msgid "Link to external page for further information" msgstr "" -#: stock/models.py:1615 +#: stock/models.py:1617 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:1621 +#: stock/models.py:1623 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:1639 +#: stock/models.py:1641 msgid "Test name" msgstr "" -#: stock/models.py:1645 templates/js/table_filters.js:190 +#: stock/models.py:1647 templates/js/table_filters.js:190 msgid "Test result" msgstr "" -#: stock/models.py:1651 +#: stock/models.py:1653 msgid "Test output value" msgstr "" -#: stock/models.py:1658 +#: stock/models.py:1660 msgid "Test result attachment" msgstr "" -#: stock/models.py:1664 +#: stock/models.py:1666 msgid "Test notes" msgstr "" @@ -4888,11 +5141,6 @@ msgstr "" msgid "Barcode Identifier" msgstr "" -#: stock/templates/stock/item_base.html:302 templates/InvenTree/search.html:167 -#: templates/js/build.js:655 templates/navbar.html:29 -msgid "Build" -msgstr "" - #: stock/templates/stock/item_base.html:323 msgid "Parent Item" msgstr "" @@ -5070,7 +5318,7 @@ msgstr "" msgid "The following stock items will be uninstalled" msgstr "" -#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1331 +#: stock/templates/stock/stockitem_convert.html:7 stock/views.py:1332 msgid "Convert Stock Item" msgstr "" @@ -5090,8 +5338,8 @@ msgstr "" msgid "Edit Stock Location" msgstr "" -#: stock/views.py:230 stock/views.py:1321 stock/views.py:1432 -#: stock/views.py:1797 +#: stock/views.py:230 stock/views.py:1322 stock/views.py:1433 +#: stock/views.py:1798 msgid "Owner is required (ownership control is enabled)" msgstr "" @@ -5179,95 +5427,121 @@ msgstr "" msgid "Move Stock Items" msgstr "" +#: stock/views.py:998 +msgid "Move" +msgstr "" + #: stock/views.py:999 msgid "Count Stock Items" msgstr "" +#: stock/views.py:999 +msgid "Count" +msgstr "" + #: stock/views.py:1000 msgid "Remove From Stock" msgstr "" +#: stock/views.py:1000 +msgid "Take" +msgstr "" + #: stock/views.py:1001 msgid "Add Stock Items" msgstr "" +#: stock/views.py:1001 users/models.py:171 +msgid "Add" +msgstr "" + #: stock/views.py:1002 msgid "Delete Stock Items" msgstr "" -#: stock/views.py:1030 +#: stock/views.py:1031 msgid "Must enter integer value" msgstr "" -#: stock/views.py:1035 +#: stock/views.py:1036 msgid "Quantity must be positive" msgstr "" -#: stock/views.py:1042 +#: stock/views.py:1043 #, python-brace-format msgid "Quantity must not exceed {x}" msgstr "" -#: stock/views.py:1106 +#: stock/views.py:1107 msgid "No action performed" msgstr "" -#: stock/views.py:1149 +#: stock/views.py:1122 +#, python-brace-format +msgid "Added stock to {n} items" +msgstr "" + +#: stock/views.py:1137 +#, python-brace-format +msgid "Removed stock from {n} items" +msgstr "" + +#: stock/views.py:1150 #, python-brace-format msgid "Counted stock for {n} items" msgstr "" -#: stock/views.py:1189 +#: stock/views.py:1190 msgid "No items were moved" msgstr "" -#: stock/views.py:1192 +#: stock/views.py:1193 #, python-brace-format msgid "Moved {n} items to {dest}" msgstr "" -#: stock/views.py:1211 +#: stock/views.py:1212 #, python-brace-format msgid "Deleted {n} stock items" msgstr "" -#: stock/views.py:1223 +#: stock/views.py:1224 msgid "Edit Stock Item" msgstr "" -#: stock/views.py:1449 +#: stock/views.py:1450 msgid "Serialize Stock" msgstr "" -#: stock/views.py:1542 templates/js/build.js:210 +#: stock/views.py:1543 templates/js/build.js:210 msgid "Create new Stock Item" msgstr "" -#: stock/views.py:1684 +#: stock/views.py:1685 msgid "Duplicate Stock Item" msgstr "" -#: stock/views.py:1766 +#: stock/views.py:1767 msgid "Quantity cannot be negative" msgstr "" -#: stock/views.py:1866 +#: stock/views.py:1867 msgid "Delete Stock Location" msgstr "" -#: stock/views.py:1879 +#: stock/views.py:1880 msgid "Delete Stock Item" msgstr "" -#: stock/views.py:1890 +#: stock/views.py:1891 msgid "Delete Stock Tracking Entry" msgstr "" -#: stock/views.py:1897 +#: stock/views.py:1898 msgid "Edit Stock Tracking Entry" msgstr "" -#: stock/views.py:1906 +#: stock/views.py:1907 msgid "Add Stock Tracking Entry" msgstr "" @@ -5371,10 +5645,6 @@ msgstr "" msgid "No category parameter templates found" msgstr "" -#: templates/InvenTree/settings/category.html:67 -msgid "Default Value" -msgstr "" - #: templates/InvenTree/settings/category.html:70 #: templates/InvenTree/settings/part.html:81 msgid "Edit Template" @@ -5683,10 +5953,6 @@ msgstr "" msgid "Open subassembly" msgstr "" -#: templates/js/bom.js:216 templates/js/bom.js:269 -msgid "Optional" -msgstr "" - #: templates/js/bom.js:261 msgid "No pricing available" msgstr "" @@ -5695,10 +5961,6 @@ msgstr "" msgid "View BOM" msgstr "" -#: templates/js/bom.js:338 templates/js/build.js:571 templates/js/build.js:984 -msgid "Actions" -msgstr "" - #: templates/js/bom.js:346 msgid "Validate BOM Item" msgstr "" @@ -5959,10 +6221,6 @@ msgstr "" msgid "No sales orders found" msgstr "" -#: templates/js/order.js:303 -msgid "Shipment Date" -msgstr "" - #: templates/js/part.js:51 templates/js/part.js:136 msgid "Trackable part" msgstr "" @@ -6282,10 +6540,6 @@ msgstr "" msgid "Item has been allocated" msgstr "" -#: templates/js/table_filters.js:111 -msgid "Include sublocations" -msgstr "" - #: templates/js/table_filters.js:112 msgid "Include stock in sublocations" msgstr "" @@ -6483,10 +6737,6 @@ msgstr "" msgid "Password" msgstr "" -#: templates/registration/login.html:76 -msgid "Enter password" -msgstr "" - #: templates/registration/login.html:83 msgid "Username / password combination is incorrect" msgstr "" @@ -6623,10 +6873,6 @@ msgstr "" msgid "Permission to view items" msgstr "" -#: users/models.py:171 -msgid "Add" -msgstr "" - #: users/models.py:171 msgid "Permission to add items" msgstr "" diff --git a/InvenTree/order/forms.py b/InvenTree/order/forms.py index c8501d68b2..4c9caf3b53 100644 --- a/InvenTree/order/forms.py +++ b/InvenTree/order/forms.py @@ -24,7 +24,7 @@ from .models import SalesOrderAllocation class IssuePurchaseOrderForm(HelperForm): - confirm = forms.BooleanField(required=True, initial=False, help_text=_('Place order')) + confirm = forms.BooleanField(required=True, initial=False, label=_('Confirm'), help_text=_('Place order')) class Meta: model = PurchaseOrder @@ -35,7 +35,7 @@ class IssuePurchaseOrderForm(HelperForm): class CompletePurchaseOrderForm(HelperForm): - confirm = forms.BooleanField(required=True, help_text=_("Mark order as complete")) + confirm = forms.BooleanField(required=True, label=_('Confirm'), help_text=_("Mark order as complete")) class Meta: model = PurchaseOrder @@ -46,7 +46,7 @@ class CompletePurchaseOrderForm(HelperForm): class CancelPurchaseOrderForm(HelperForm): - confirm = forms.BooleanField(required=True, help_text=_('Cancel order')) + confirm = forms.BooleanField(required=True, label=_('Confirm'), help_text=_('Cancel order')) class Meta: model = PurchaseOrder @@ -57,7 +57,7 @@ class CancelPurchaseOrderForm(HelperForm): class CancelSalesOrderForm(HelperForm): - confirm = forms.BooleanField(required=True, help_text=_('Cancel order')) + confirm = forms.BooleanField(required=True, label=_('Confirm'), help_text=_('Cancel order')) class Meta: model = SalesOrder @@ -68,7 +68,7 @@ class CancelSalesOrderForm(HelperForm): class ShipSalesOrderForm(HelperForm): - confirm = forms.BooleanField(required=True, help_text=_('Ship order')) + confirm = forms.BooleanField(required=True, label=_('Confirm'), help_text=_('Ship order')) class Meta: model = SalesOrder @@ -79,7 +79,7 @@ class ShipSalesOrderForm(HelperForm): class ReceivePurchaseOrderForm(HelperForm): - location = TreeNodeChoiceField(queryset=StockLocation.objects.all(), required=True, help_text=_('Receive parts to this location')) + location = TreeNodeChoiceField(queryset=StockLocation.objects.all(), required=True, label=_('Location'), help_text=_('Receive parts to this location')) class Meta: model = PurchaseOrder @@ -106,6 +106,7 @@ class EditPurchaseOrderForm(HelperForm): super().__init__(*args, **kwargs) target_date = DatePickerFormField( + label=_('Target Date'), help_text=_('Target date for order delivery. Order will be overdue after this date.'), ) @@ -140,6 +141,7 @@ class EditSalesOrderForm(HelperForm): super().__init__(*args, **kwargs) target_date = DatePickerFormField( + label=_('Target Date'), help_text=_('Target date for order completion. Order will be overdue after this date.'), ) @@ -183,7 +185,7 @@ class EditSalesOrderAttachmentForm(HelperForm): class EditPurchaseOrderLineItemForm(HelperForm): """ Form for editing a PurchaseOrderLineItem object """ - quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: model = PurchaseOrderLineItem @@ -200,7 +202,7 @@ class EditPurchaseOrderLineItemForm(HelperForm): class EditSalesOrderLineItemForm(HelperForm): """ Form for editing a SalesOrderLineItem object """ - quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: model = SalesOrderLineItem @@ -256,7 +258,7 @@ class CreateSalesOrderAllocationForm(HelperForm): Form for creating a SalesOrderAllocation item. """ - quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: model = SalesOrderAllocation @@ -273,7 +275,7 @@ class EditSalesOrderAllocationForm(HelperForm): Form for editing a SalesOrderAllocation item """ - quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: model = SalesOrderAllocation diff --git a/InvenTree/order/migrations/0044_auto_20210403_1210.py b/InvenTree/order/migrations/0044_auto_20210403_1210.py deleted file mode 100644 index e0fa3692fe..0000000000 --- a/InvenTree/order/migrations/0044_auto_20210403_1210.py +++ /dev/null @@ -1,57 +0,0 @@ -# Generated by Django 3.0.7 on 2021-04-03 12:10 - -import InvenTree.models -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('order', '0043_auto_20210330_0013'), - ] - - operations = [ - migrations.AlterField( - model_name='purchaseorderattachment', - name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), - ), - migrations.AlterField( - model_name='purchaseorderattachment', - name='comment', - field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), - ), - migrations.AlterField( - model_name='purchaseorderattachment', - name='upload_date', - field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), - ), - migrations.AlterField( - model_name='purchaseorderattachment', - name='user', - field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), - ), - migrations.AlterField( - model_name='salesorderattachment', - name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), - ), - migrations.AlterField( - model_name='salesorderattachment', - name='comment', - field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), - ), - migrations.AlterField( - model_name='salesorderattachment', - name='upload_date', - field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), - ), - migrations.AlterField( - model_name='salesorderattachment', - name='user', - field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), - ), - ] diff --git a/InvenTree/order/migrations/0044_auto_20210404_2016.py b/InvenTree/order/migrations/0044_auto_20210404_2016.py new file mode 100644 index 0000000000..f683ce0aae --- /dev/null +++ b/InvenTree/order/migrations/0044_auto_20210404_2016.py @@ -0,0 +1,233 @@ +# Generated by Django 3.0.7 on 2021-04-04 20:16 + +import InvenTree.fields +import InvenTree.models +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import markdownx.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('company', '0032_auto_20210403_1837'), + ('part', '0063_bomitem_inherited'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('stock', '0058_stockitem_packaging'), + ('order', '0043_auto_20210330_0013'), + ] + + operations = [ + migrations.AlterField( + model_name='purchaseorder', + name='created_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='creation_date', + field=models.DateField(blank=True, null=True, verbose_name='Creation Date'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='description', + field=models.CharField(help_text='Order description', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='link', + field=models.URLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='notes', + field=markdownx.models.MarkdownxField(blank=True, help_text='Order notes', verbose_name='Notes'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='received_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='received by'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='reference', + field=models.CharField(help_text='Order reference', max_length=64, unique=True, verbose_name='Reference'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='supplier', + field=models.ForeignKey(help_text='Company from which the items are being ordered', limit_choices_to={'is_supplier': True}, on_delete=django.db.models.deletion.CASCADE, related_name='purchase_orders', to='company.Company', verbose_name='Supplier'), + ), + migrations.AlterField( + model_name='purchaseorder', + name='supplier_reference', + field=models.CharField(blank=True, help_text='Supplier order reference code', max_length=64, verbose_name='Supplier Reference'), + ), + migrations.AlterField( + model_name='purchaseorderattachment', + name='attachment', + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + ), + migrations.AlterField( + model_name='purchaseorderattachment', + name='comment', + field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='purchaseorderattachment', + name='upload_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), + ), + migrations.AlterField( + model_name='purchaseorderattachment', + name='user', + field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AlterField( + model_name='purchaseorderlineitem', + name='notes', + field=models.CharField(blank=True, help_text='Line item notes', max_length=500, verbose_name='Notes'), + ), + migrations.AlterField( + model_name='purchaseorderlineitem', + name='order', + field=models.ForeignKey(help_text='Purchase Order', on_delete=django.db.models.deletion.CASCADE, related_name='lines', to='order.PurchaseOrder', verbose_name='Order'), + ), + migrations.AlterField( + model_name='purchaseorderlineitem', + name='part', + field=models.ForeignKey(blank=True, help_text='Supplier part', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='purchase_order_line_items', to='company.SupplierPart', verbose_name='Part'), + ), + migrations.AlterField( + model_name='purchaseorderlineitem', + name='quantity', + field=InvenTree.fields.RoundingDecimalField(decimal_places=5, default=1, help_text='Item quantity', max_digits=15, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Quantity'), + ), + migrations.AlterField( + model_name='purchaseorderlineitem', + name='received', + field=models.DecimalField(decimal_places=5, default=0, help_text='Number of items received', max_digits=15, verbose_name='Received'), + ), + migrations.AlterField( + model_name='purchaseorderlineitem', + name='reference', + field=models.CharField(blank=True, help_text='Line item reference', max_length=100, verbose_name='Reference'), + ), + migrations.AlterField( + model_name='salesorder', + name='created_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Created By'), + ), + migrations.AlterField( + model_name='salesorder', + name='creation_date', + field=models.DateField(blank=True, null=True, verbose_name='Creation Date'), + ), + migrations.AlterField( + model_name='salesorder', + name='customer', + field=models.ForeignKey(help_text='Company to which the items are being sold', limit_choices_to={'is_customer': True}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sales_orders', to='company.Company', verbose_name='Customer'), + ), + migrations.AlterField( + model_name='salesorder', + name='customer_reference', + field=models.CharField(blank=True, help_text='Customer order reference code', max_length=64, verbose_name='Customer Reference '), + ), + migrations.AlterField( + model_name='salesorder', + name='description', + field=models.CharField(help_text='Order description', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='salesorder', + name='link', + field=models.URLField(blank=True, help_text='Link to external page', verbose_name='Link'), + ), + migrations.AlterField( + model_name='salesorder', + name='notes', + field=markdownx.models.MarkdownxField(blank=True, help_text='Order notes', verbose_name='Notes'), + ), + migrations.AlterField( + model_name='salesorder', + name='reference', + field=models.CharField(help_text='Order reference', max_length=64, unique=True, verbose_name='Reference'), + ), + migrations.AlterField( + model_name='salesorder', + name='shipment_date', + field=models.DateField(blank=True, null=True, verbose_name='Shipment Date'), + ), + migrations.AlterField( + model_name='salesorder', + name='shipped_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='shipped by'), + ), + migrations.AlterField( + model_name='salesorder', + name='status', + field=models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'Shipped'), (40, 'Cancelled'), (50, 'Lost'), (60, 'Returned')], default=10, help_text='Purchase order status', verbose_name='Status'), + ), + migrations.AlterField( + model_name='salesorderallocation', + name='item', + field=models.ForeignKey(help_text='Select stock item to allocate', limit_choices_to={'belongs_to': None, 'part__salable': True, 'sales_order': None}, on_delete=django.db.models.deletion.CASCADE, related_name='sales_order_allocations', to='stock.StockItem', verbose_name='Item'), + ), + migrations.AlterField( + model_name='salesorderallocation', + name='line', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='allocations', to='order.SalesOrderLineItem', verbose_name='Line'), + ), + migrations.AlterField( + model_name='salesorderallocation', + name='quantity', + field=InvenTree.fields.RoundingDecimalField(decimal_places=5, default=1, help_text='Enter stock allocation quantity', max_digits=15, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Quantity'), + ), + migrations.AlterField( + model_name='salesorderattachment', + name='attachment', + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + ), + migrations.AlterField( + model_name='salesorderattachment', + name='comment', + field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='salesorderattachment', + name='upload_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), + ), + migrations.AlterField( + model_name='salesorderattachment', + name='user', + field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AlterField( + model_name='salesorderlineitem', + name='notes', + field=models.CharField(blank=True, help_text='Line item notes', max_length=500, verbose_name='Notes'), + ), + migrations.AlterField( + model_name='salesorderlineitem', + name='order', + field=models.ForeignKey(help_text='Sales Order', on_delete=django.db.models.deletion.CASCADE, related_name='lines', to='order.SalesOrder', verbose_name='Order'), + ), + migrations.AlterField( + model_name='salesorderlineitem', + name='part', + field=models.ForeignKey(help_text='Part', limit_choices_to={'salable': True}, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sales_order_line_items', to='part.Part', verbose_name='Part'), + ), + migrations.AlterField( + model_name='salesorderlineitem', + name='quantity', + field=InvenTree.fields.RoundingDecimalField(decimal_places=5, default=1, help_text='Item quantity', max_digits=15, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Quantity'), + ), + migrations.AlterField( + model_name='salesorderlineitem', + name='reference', + field=models.CharField(blank=True, help_text='Line item reference', max_length=100, verbose_name='Reference'), + ), + ] diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index b1ee7f7c74..818bc81707 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -96,18 +96,19 @@ class Order(models.Model): class Meta: abstract = True - reference = models.CharField(unique=True, max_length=64, blank=False, help_text=_('Order reference')) + reference = models.CharField(unique=True, max_length=64, blank=False, verbose_name=_('Reference'), help_text=_('Order reference')) - description = models.CharField(max_length=250, help_text=_('Order description')) + description = models.CharField(max_length=250, verbose_name=_('Description'), help_text=_('Order description')) - link = models.URLField(blank=True, help_text=_('Link to external page')) + link = models.URLField(blank=True, verbose_name=_('Link'), help_text=_('Link to external page')) - creation_date = models.DateField(blank=True, null=True) + creation_date = models.DateField(blank=True, null=True, verbose_name=_('Creation Date')) created_by = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True, - related_name='+' + related_name='+', + verbose_name=_('Created By') ) responsible = models.ForeignKey( @@ -119,7 +120,7 @@ class Order(models.Model): related_name='+', ) - notes = MarkdownxField(blank=True, help_text=_('Order notes')) + notes = MarkdownxField(blank=True, verbose_name=_('Notes'), help_text=_('Order notes')) class PurchaseOrder(Order): @@ -186,16 +187,18 @@ class PurchaseOrder(Order): 'is_supplier': True, }, related_name='purchase_orders', + verbose_name=_('Supplier'), help_text=_('Company from which the items are being ordered') ) - supplier_reference = models.CharField(max_length=64, blank=True, help_text=_("Supplier order reference code")) + supplier_reference = models.CharField(max_length=64, blank=True, verbose_name=_('Supplier Reference'), help_text=_("Supplier order reference code")) received_by = models.ForeignKey( User, on_delete=models.SET_NULL, blank=True, null=True, - related_name='+' + related_name='+', + verbose_name=_('received by') ) issue_date = models.DateField( @@ -434,13 +437,14 @@ class SalesOrder(Order): null=True, limit_choices_to={'is_customer': True}, related_name='sales_orders', + verbose_name=_('Customer'), help_text=_("Company to which the items are being sold"), ) status = models.PositiveIntegerField(default=SalesOrderStatus.PENDING, choices=SalesOrderStatus.items(), - help_text=_('Purchase order status')) + verbose_name=_('Status'), help_text=_('Purchase order status')) - customer_reference = models.CharField(max_length=64, blank=True, help_text=_("Customer order reference code")) + customer_reference = models.CharField(max_length=64, blank=True, verbose_name=_('Customer Reference '), help_text=_("Customer order reference code")) target_date = models.DateField( null=True, blank=True, @@ -448,13 +452,14 @@ class SalesOrder(Order): help_text=_('Target date for order completion. Order will be overdue after this date.') ) - shipment_date = models.DateField(blank=True, null=True) + shipment_date = models.DateField(blank=True, null=True, verbose_name=_('Shipment Date')) shipped_by = models.ForeignKey( User, on_delete=models.SET_NULL, blank=True, null=True, - related_name='+' + related_name='+', + verbose_name=_('shipped by') ) @property @@ -585,11 +590,11 @@ class OrderLineItem(models.Model): class Meta: abstract = True - quantity = RoundingDecimalField(max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], default=1, help_text=_('Item quantity')) + quantity = RoundingDecimalField(max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], default=1, verbose_name=_('Quantity'), help_text=_('Item quantity')) - reference = models.CharField(max_length=100, blank=True, help_text=_('Line item reference')) + reference = models.CharField(max_length=100, blank=True, verbose_name=_('Reference'), help_text=_('Line item reference')) - notes = models.CharField(max_length=500, blank=True, help_text=_('Line item notes')) + notes = models.CharField(max_length=500, blank=True, verbose_name=_('Notes'), help_text=_('Line item notes')) class PurchaseOrderLineItem(OrderLineItem): @@ -615,6 +620,7 @@ class PurchaseOrderLineItem(OrderLineItem): order = models.ForeignKey( PurchaseOrder, on_delete=models.CASCADE, related_name='lines', + verbose_name=_('Order'), help_text=_('Purchase Order') ) @@ -628,10 +634,11 @@ class PurchaseOrderLineItem(OrderLineItem): SupplierPart, on_delete=models.SET_NULL, blank=True, null=True, related_name='purchase_order_line_items', + verbose_name=_('Part'), help_text=_("Supplier part"), ) - received = models.DecimalField(decimal_places=5, max_digits=15, default=0, help_text=_('Number of items received')) + received = models.DecimalField(decimal_places=5, max_digits=15, default=0, verbose_name=_('Received') , help_text=_('Number of items received')) purchase_price = MoneyField( max_digits=19, @@ -657,9 +664,9 @@ class SalesOrderLineItem(OrderLineItem): part: Link to a Part object (may be null) """ - order = models.ForeignKey(SalesOrder, on_delete=models.CASCADE, related_name='lines', help_text=_('Sales Order')) + order = models.ForeignKey(SalesOrder, on_delete=models.CASCADE, related_name='lines', verbose_name=_('Order'), help_text=_('Sales Order')) - part = models.ForeignKey('part.Part', on_delete=models.SET_NULL, related_name='sales_order_line_items', null=True, help_text=_('Part'), limit_choices_to={'salable': True}) + part = models.ForeignKey('part.Part', on_delete=models.SET_NULL, related_name='sales_order_line_items', null=True, verbose_name=_('Part'), help_text=_('Part'), limit_choices_to={'salable': True}) class Meta: unique_together = [ @@ -759,7 +766,7 @@ class SalesOrderAllocation(models.Model): if len(errors) > 0: raise ValidationError(errors) - line = models.ForeignKey(SalesOrderLineItem, on_delete=models.CASCADE, related_name='allocations') + line = models.ForeignKey(SalesOrderLineItem, on_delete=models.CASCADE, verbose_name=_('Line'), related_name='allocations') item = models.ForeignKey( 'stock.StockItem', @@ -770,10 +777,11 @@ class SalesOrderAllocation(models.Model): 'belongs_to': None, 'sales_order': None, }, + verbose_name=_('Item'), help_text=_('Select stock item to allocate') ) - quantity = RoundingDecimalField(max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], default=1, help_text=_('Enter stock allocation quantity')) + quantity = RoundingDecimalField(max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], default=1, verbose_name=_('Quantity'), help_text=_('Enter stock allocation quantity')) def get_serial(self): return self.item.serial diff --git a/InvenTree/order/templates/order/order_complete.html b/InvenTree/order/templates/order/order_complete.html index f6b9f14338..0f6aa55133 100644 --- a/InvenTree/order/templates/order/order_complete.html +++ b/InvenTree/order/templates/order/order_complete.html @@ -1,12 +1,14 @@ {% extends "modal_form.html" %} +{% load i18n %} + {% block pre_form_content %} -Mark this order as complete? +{% trans 'Mark this order as complete?' %} {% if not order.is_complete %} <div class='alert alert-warning alert-block'> - This order has line items which have not been marked as received. - Marking this order as complete will remove these line items. + {%trans 'This order has line items which have not been marked as received. + Marking this order as complete will remove these line items.' %} </div> {% endif %} diff --git a/InvenTree/order/templates/order/order_issue.html b/InvenTree/order/templates/order/order_issue.html index ad80fc5a0d..bb3c3eea8a 100644 --- a/InvenTree/order/templates/order/order_issue.html +++ b/InvenTree/order/templates/order/order_issue.html @@ -1,7 +1,9 @@ {% extends "modal_form.html" %} +{% load i18n %} + {% block pre_form_content %} -After placing this purchase order, line items will no longer be editable. +{% trans 'After placing this purchase order, line items will no longer be editable.' %} {% endblock %} \ No newline at end of file diff --git a/InvenTree/order/templates/order/order_wizard/select_parts.html b/InvenTree/order/templates/order/order_wizard/select_parts.html index 21e23266bb..d3f1796dce 100644 --- a/InvenTree/order/templates/order/order_wizard/select_parts.html +++ b/InvenTree/order/templates/order/order_wizard/select_parts.html @@ -39,7 +39,7 @@ {{ part.full_name }} <small><i>{{ part.description }}</i></small> </td> <td> - <button class='btn btn-default btn-create' onClick='newSupplierPartFromOrderWizard()' id='new_supplier_part_{{ part.id }}' part='{{ part.pk }}' title='{% trans "Create new supplier part" $}' type='button'> + <button class='btn btn-default btn-create' onClick='newSupplierPartFromOrderWizard()' id='new_supplier_part_{{ part.id }}' part='{{ part.pk }}' title='{% trans "Create new supplier part" %}' type='button'> <span part='{{ part.pk }}' class='fas fa-plus-circle'></span> </button> </td> diff --git a/InvenTree/order/templates/order/sales_order_detail.html b/InvenTree/order/templates/order/sales_order_detail.html index 7b4a4ed4f7..392a236931 100644 --- a/InvenTree/order/templates/order/sales_order_detail.html +++ b/InvenTree/order/templates/order/sales_order_detail.html @@ -67,7 +67,7 @@ function showAllocationSubTable(index, row, element) { { width: '50%', field: 'allocated', - title: 'Quantity', + title: '{% trans "Quantity" %}', formatter: function(value, row, index, field) { var text = ''; @@ -89,7 +89,7 @@ function showAllocationSubTable(index, row, element) { }, { field: 'buttons', - title: 'Actions', + title: '{% trans "Actions" %}', formatter: function(value, row, index, field) { var html = "<div class='btn-group float-right' role='group'>"; @@ -167,7 +167,7 @@ function showFulfilledSubTable(index, row, element) { } $("#so-lines-table").inventreeTable({ - formatNoMatches: function() { return "No matching line items"; }, + formatNoMatches: function() { return "{% trans 'No matching line items' %}"; }, queryParams: { order: {{ order.id }}, part_detail: true, @@ -196,7 +196,7 @@ $("#so-lines-table").inventreeTable({ columns: [ { field: 'pk', - title: 'ID', + title: '{% trans "ID" %}', visible: false, switchable: false, }, @@ -204,7 +204,7 @@ $("#so-lines-table").inventreeTable({ sortable: true, sortName: 'part__name', field: 'part', - title: 'Part', + title: '{% trans "Part" %}', formatter: function(value, row, index, field) { if (row.part) { return imageHoverIcon(row.part_detail.thumbnail) + renderLink(row.part_detail.full_name, `/part/${value}/`); @@ -216,12 +216,12 @@ $("#so-lines-table").inventreeTable({ { sortable: true, field: 'reference', - title: 'Reference' + title: '{% trans "Reference" %}' }, { sortable: true, field: 'quantity', - title: 'Quantity', + title: '{% trans "Quantity" %}', }, { field: 'allocated', @@ -261,7 +261,7 @@ $("#so-lines-table").inventreeTable({ }, { field: 'notes', - title: 'Notes', + title: '{% trans "Notes" %}', }, {% if order.status == SalesOrderStatus.PENDING %} { diff --git a/InvenTree/part/bom.py b/InvenTree/part/bom.py index ccde26e2f7..f3cf598225 100644 --- a/InvenTree/part/bom.py +++ b/InvenTree/part/bom.py @@ -275,7 +275,7 @@ class BomUploadManager: elif ext in ['.xls', '.xlsx']: raw_data = bom_file.read() else: - raise ValidationError({'bom_file': _('Unsupported file format: {f}'.format(f=ext))}) + raise ValidationError({'bom_file': _('Unsupported file format: {f}').format(f=ext)}) try: self.data = tablib.Dataset().load(raw_data) diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index 42970ccfb1..63cd7b4399 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -129,6 +129,7 @@ class BomDuplicateForm(HelperForm): confirm = forms.BooleanField( required=False, initial=False, + label=_('Confirm'), help_text=_('Confirm BOM duplication') ) @@ -147,7 +148,7 @@ class BomValidateForm(HelperForm): to confirm that the BOM for this part is valid """ - validate = forms.BooleanField(required=False, initial=False, help_text=_('Confirm that the BOM is correct')) + validate = forms.BooleanField(required=False, initial=False, label=_('validate'), help_text=_('Confirm that the BOM is correct')) class Meta: model = Part @@ -159,7 +160,7 @@ class BomValidateForm(HelperForm): class BomUploadSelectFile(HelperForm): """ Form for importing a BOM. Provides a file input box for upload """ - bom_file = forms.FileField(label='BOM file', required=True, help_text=_("Select BOM file to upload")) + bom_file = forms.FileField(label=_('BOM file'), required=True, help_text=_("Select BOM file to upload")) class Meta: model = Part @@ -336,9 +337,9 @@ class EditCategoryParameterTemplateForm(HelperForm): class EditBomItemForm(HelperForm): """ Form for editing a BomItem object """ - quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) - sub_part = PartModelChoiceField(queryset=Part.objects.all()) + sub_part = PartModelChoiceField(queryset=Part.objects.all(), label=_('Sub part')) class Meta: model = BomItem @@ -365,6 +366,7 @@ class PartPriceForm(forms.Form): quantity = forms.IntegerField( required=True, initial=1, + label=_('Quantity'), help_text=_('Input quantity for price calculation') ) @@ -380,7 +382,7 @@ class EditPartSalePriceBreakForm(HelperForm): Form for creating / editing a sale price for a part """ - quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) class Meta: model = PartSellPriceBreak diff --git a/InvenTree/part/migrations/0064_auto_20210403_1210.py b/InvenTree/part/migrations/0064_auto_20210403_1210.py deleted file mode 100644 index d3f4b2b75f..0000000000 --- a/InvenTree/part/migrations/0064_auto_20210403_1210.py +++ /dev/null @@ -1,110 +0,0 @@ -# Generated by Django 3.0.7 on 2021-04-03 12:10 - -import InvenTree.models -import InvenTree.validators -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import mptt.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('stock', '0059_auto_20210403_1210'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('part', '0063_bomitem_inherited'), - ] - - operations = [ - migrations.AlterField( - model_name='part', - name='bom_checked_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='boms_checked', to=settings.AUTH_USER_MODEL, verbose_name='BOM checked by'), - ), - migrations.AlterField( - model_name='part', - name='bom_checked_date', - field=models.DateField(blank=True, null=True, verbose_name='BOM checked date'), - ), - migrations.AlterField( - model_name='part', - name='bom_checksum', - field=models.CharField(blank=True, help_text='Stored BOM checksum', max_length=128, verbose_name='BOM checksum'), - ), - migrations.AlterField( - model_name='part', - name='creation_date', - field=models.DateField(auto_now_add=True, null=True, verbose_name='Creation Date'), - ), - migrations.AlterField( - model_name='part', - name='creation_user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parts_created', to=settings.AUTH_USER_MODEL, verbose_name='Creation User'), - ), - migrations.AlterField( - model_name='part', - name='responsible', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parts_responible', to=settings.AUTH_USER_MODEL, verbose_name='Responsible'), - ), - migrations.AlterField( - model_name='partattachment', - name='attachment', - field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), - ), - migrations.AlterField( - model_name='partattachment', - name='comment', - field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), - ), - migrations.AlterField( - model_name='partattachment', - name='upload_date', - field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), - ), - migrations.AlterField( - model_name='partattachment', - name='user', - field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), - ), - migrations.AlterField( - model_name='partcategory', - name='default_keywords', - field=models.CharField(blank=True, help_text='Default keywords for parts in this category', max_length=250, null=True, verbose_name='Default keywords'), - ), - migrations.AlterField( - model_name='partcategory', - name='default_location', - field=mptt.fields.TreeForeignKey(blank=True, help_text='Default location for parts in this category', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='default_categories', to='stock.StockLocation', verbose_name='Default Location'), - ), - migrations.AlterField( - model_name='partcategory', - name='description', - field=models.CharField(blank=True, help_text='Description (optional)', max_length=250, verbose_name='Description'), - ), - migrations.AlterField( - model_name='partcategory', - name='name', - field=models.CharField(help_text='Name', max_length=100, validators=[InvenTree.validators.validate_tree_name], verbose_name='Name'), - ), - migrations.AlterField( - model_name='partcategory', - name='parent', - field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='children', to='part.PartCategory', verbose_name='parent'), - ), - migrations.AlterField( - model_name='partparameter', - name='data', - field=models.CharField(help_text='Parameter Value', max_length=500, verbose_name='Data'), - ), - migrations.AlterField( - model_name='partparameter', - name='part', - field=models.ForeignKey(help_text='Parent Part', on_delete=django.db.models.deletion.CASCADE, related_name='parameters', to='part.Part', verbose_name='Part'), - ), - migrations.AlterField( - model_name='partparameter', - name='template', - field=models.ForeignKey(help_text='Parameter Template', on_delete=django.db.models.deletion.CASCADE, related_name='instances', to='part.PartParameterTemplate', verbose_name='Template'), - ), - ] diff --git a/InvenTree/part/migrations/0064_auto_20210404_2016.py b/InvenTree/part/migrations/0064_auto_20210404_2016.py new file mode 100644 index 0000000000..57943347a1 --- /dev/null +++ b/InvenTree/part/migrations/0064_auto_20210404_2016.py @@ -0,0 +1,218 @@ +# Generated by Django 3.0.7 on 2021-04-04 20:16 + +import InvenTree.models +import InvenTree.validators +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import mptt.fields +import part.models +import stdimage.models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('stock', '0058_stockitem_packaging'), + ('part', '0063_bomitem_inherited'), + ] + + operations = [ + migrations.AlterField( + model_name='bomitem', + name='checksum', + field=models.CharField(blank=True, help_text='BOM line checksum', max_length=128, verbose_name='Checksum'), + ), + migrations.AlterField( + model_name='bomitem', + name='note', + field=models.CharField(blank=True, help_text='BOM item notes', max_length=500, verbose_name='Note'), + ), + migrations.AlterField( + model_name='bomitem', + name='optional', + field=models.BooleanField(default=False, help_text='This BOM item is optional', verbose_name='Optional'), + ), + migrations.AlterField( + model_name='bomitem', + name='overage', + field=models.CharField(blank=True, help_text='Estimated build wastage quantity (absolute or percentage)', max_length=24, validators=[InvenTree.validators.validate_overage], verbose_name='Overage'), + ), + migrations.AlterField( + model_name='bomitem', + name='part', + field=models.ForeignKey(help_text='Select parent part', limit_choices_to={'assembly': True}, on_delete=django.db.models.deletion.CASCADE, related_name='bom_items', to='part.Part', verbose_name='Part'), + ), + migrations.AlterField( + model_name='bomitem', + name='quantity', + field=models.DecimalField(decimal_places=5, default=1.0, help_text='BOM quantity for this BOM item', max_digits=15, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Quantity'), + ), + migrations.AlterField( + model_name='bomitem', + name='reference', + field=models.CharField(blank=True, help_text='BOM item reference', max_length=500, verbose_name='Reference'), + ), + migrations.AlterField( + model_name='bomitem', + name='sub_part', + field=models.ForeignKey(help_text='Select part to be used in BOM', limit_choices_to={'component': True}, on_delete=django.db.models.deletion.CASCADE, related_name='used_in', to='part.Part', verbose_name='Sub part'), + ), + migrations.AlterField( + model_name='part', + name='bom_checked_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='boms_checked', to=settings.AUTH_USER_MODEL, verbose_name='BOM checked by'), + ), + migrations.AlterField( + model_name='part', + name='bom_checked_date', + field=models.DateField(blank=True, null=True, verbose_name='BOM checked date'), + ), + migrations.AlterField( + model_name='part', + name='bom_checksum', + field=models.CharField(blank=True, help_text='Stored BOM checksum', max_length=128, verbose_name='BOM checksum'), + ), + migrations.AlterField( + model_name='part', + name='creation_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='Creation Date'), + ), + migrations.AlterField( + model_name='part', + name='creation_user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parts_created', to=settings.AUTH_USER_MODEL, verbose_name='Creation User'), + ), + migrations.AlterField( + model_name='part', + name='image', + field=stdimage.models.StdImageField(blank=True, null=True, upload_to=part.models.rename_part_image, verbose_name='Image'), + ), + migrations.AlterField( + model_name='part', + name='responsible', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parts_responible', to=settings.AUTH_USER_MODEL, verbose_name='Responsible'), + ), + migrations.AlterField( + model_name='partattachment', + name='attachment', + field=models.FileField(help_text='Select file to attach', upload_to=InvenTree.models.rename_attachment, verbose_name='Attachment'), + ), + migrations.AlterField( + model_name='partattachment', + name='comment', + field=models.CharField(blank=True, help_text='File comment', max_length=100, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='partattachment', + name='part', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='part.Part', verbose_name='Part'), + ), + migrations.AlterField( + model_name='partattachment', + name='upload_date', + field=models.DateField(auto_now_add=True, null=True, verbose_name='upload date'), + ), + migrations.AlterField( + model_name='partattachment', + name='user', + field=models.ForeignKey(blank=True, help_text='User', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AlterField( + model_name='partcategory', + name='default_keywords', + field=models.CharField(blank=True, help_text='Default keywords for parts in this category', max_length=250, null=True, verbose_name='Default keywords'), + ), + migrations.AlterField( + model_name='partcategory', + name='default_location', + field=mptt.fields.TreeForeignKey(blank=True, help_text='Default location for parts in this category', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='default_categories', to='stock.StockLocation', verbose_name='Default Location'), + ), + migrations.AlterField( + model_name='partcategory', + name='description', + field=models.CharField(blank=True, help_text='Description (optional)', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='partcategory', + name='name', + field=models.CharField(help_text='Name', max_length=100, validators=[InvenTree.validators.validate_tree_name], verbose_name='Name'), + ), + migrations.AlterField( + model_name='partcategory', + name='parent', + field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='children', to='part.PartCategory', verbose_name='parent'), + ), + migrations.AlterField( + model_name='partcategoryparametertemplate', + name='category', + field=models.ForeignKey(help_text='Part Category', on_delete=django.db.models.deletion.CASCADE, related_name='parameter_templates', to='part.PartCategory', verbose_name='Category'), + ), + migrations.AlterField( + model_name='partcategoryparametertemplate', + name='default_value', + field=models.CharField(blank=True, help_text='Default Parameter Value', max_length=500, verbose_name='Default Value'), + ), + migrations.AlterField( + model_name='partcategoryparametertemplate', + name='parameter_template', + field=models.ForeignKey(help_text='Parameter Template', on_delete=django.db.models.deletion.CASCADE, related_name='part_categories', to='part.PartParameterTemplate', verbose_name='Parameter Template'), + ), + migrations.AlterField( + model_name='partparameter', + name='data', + field=models.CharField(help_text='Parameter Value', max_length=500, verbose_name='Data'), + ), + migrations.AlterField( + model_name='partparameter', + name='part', + field=models.ForeignKey(help_text='Parent Part', on_delete=django.db.models.deletion.CASCADE, related_name='parameters', to='part.Part', verbose_name='Part'), + ), + migrations.AlterField( + model_name='partparameter', + name='template', + field=models.ForeignKey(help_text='Parameter Template', on_delete=django.db.models.deletion.CASCADE, related_name='instances', to='part.PartParameterTemplate', verbose_name='Template'), + ), + migrations.AlterField( + model_name='partparametertemplate', + name='name', + field=models.CharField(help_text='Parameter Name', max_length=100, unique=True, verbose_name='Name'), + ), + migrations.AlterField( + model_name='partparametertemplate', + name='units', + field=models.CharField(blank=True, help_text='Parameter Units', max_length=25, verbose_name='Units'), + ), + migrations.AlterField( + model_name='partrelated', + name='part_1', + field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='related_parts_1', to='part.Part', verbose_name='Part 1'), + ), + migrations.AlterField( + model_name='partrelated', + name='part_2', + field=models.ForeignKey(help_text='Select Related Part', on_delete=django.db.models.deletion.DO_NOTHING, related_name='related_parts_2', to='part.Part', verbose_name='Part 2'), + ), + migrations.AlterField( + model_name='partsellpricebreak', + name='part', + field=models.ForeignKey(limit_choices_to={'salable': True}, on_delete=django.db.models.deletion.CASCADE, related_name='salepricebreaks', to='part.Part', verbose_name='Part'), + ), + migrations.AlterField( + model_name='partstar', + name='part', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='starred_users', to='part.Part', verbose_name='Part'), + ), + migrations.AlterField( + model_name='partstar', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='starred_parts', to=settings.AUTH_USER_MODEL, verbose_name='User'), + ), + migrations.AlterField( + model_name='parttesttemplate', + name='part', + field=models.ForeignKey(limit_choices_to={'trackable': True}, on_delete=django.db.models.deletion.CASCADE, related_name='test_templates', to='part.Part', verbose_name='Part'), + ), + ] diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 9003e800d8..d2f8b805d3 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -443,10 +443,10 @@ class Part(MPTTModel): return if self.pk == parent.pk: - raise ValidationError({'sub_part': _("Part '{p1}' is used in BOM for '{p2}' (recursive)".format( + raise ValidationError({'sub_part': _("Part '{p1}' is used in BOM for '{p2}' (recursive)").format( p1=str(self), p2=str(parent) - ))}) + )}) bom_items = self.get_bom_items() @@ -455,10 +455,10 @@ class Part(MPTTModel): # Check for simple match if item.sub_part == parent: - raise ValidationError({'sub_part': _("Part '{p1}' is used in BOM for '{p2}' (recursive)".format( + raise ValidationError({'sub_part': _("Part '{p1}' is used in BOM for '{p2}' (recursive)").format( p1=str(parent), p2=str(self) - ))}) + )}) # And recursively check too item.sub_part.checkAddToBOM(parent) @@ -750,6 +750,7 @@ class Part(MPTTModel): blank=True, variations={'thumbnail': (128, 128)}, delete_orphans=False, + verbose_name=_('Image'), ) default_location = TreeForeignKey( @@ -1852,7 +1853,7 @@ class PartAttachment(InvenTreeAttachment): return os.path.join("part_files", str(self.part.id)) part = models.ForeignKey(Part, on_delete=models.CASCADE, - related_name='attachments') + verbose_name=_('Part'), related_name='attachments') class PartSellPriceBreak(common.models.PriceBreak): @@ -1863,7 +1864,8 @@ class PartSellPriceBreak(common.models.PriceBreak): part = models.ForeignKey( Part, on_delete=models.CASCADE, related_name='salepricebreaks', - limit_choices_to={'salable': True} + limit_choices_to={'salable': True}, + verbose_name=_('Part') ) class Meta: @@ -1881,9 +1883,9 @@ class PartStar(models.Model): user: Link to a User object """ - part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='starred_users') + part = models.ForeignKey(Part, on_delete=models.CASCADE, verbose_name=_('Part'), related_name='starred_users') - user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='starred_parts') + user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_('User'), related_name='starred_parts') class Meta: unique_together = ['part', 'user'] @@ -1956,6 +1958,7 @@ class PartTestTemplate(models.Model): on_delete=models.CASCADE, related_name='test_templates', limit_choices_to={'trackable': True}, + verbose_name=_('Part'), ) test_name = models.CharField( @@ -2023,9 +2026,9 @@ class PartParameterTemplate(models.Model): except PartParameterTemplate.DoesNotExist: pass - name = models.CharField(max_length=100, help_text=_('Parameter Name'), unique=True) + name = models.CharField(max_length=100, verbose_name=_('Name'), help_text=_('Parameter Name'), unique=True) - units = models.CharField(max_length=25, help_text=_('Parameter Units'), blank=True) + units = models.CharField(max_length=25, verbose_name=_('Units'), help_text=_('Parameter Units'), blank=True) class PartParameter(models.Model): @@ -2096,15 +2099,18 @@ class PartCategoryParameterTemplate(models.Model): category = models.ForeignKey(PartCategory, on_delete=models.CASCADE, related_name='parameter_templates', + verbose_name=_('Category'), help_text=_('Part Category')) parameter_template = models.ForeignKey(PartParameterTemplate, on_delete=models.CASCADE, related_name='part_categories', + verbose_name=_('Parameter Template'), help_text=_('Parameter Template')) default_value = models.CharField(max_length=500, blank=True, + verbose_name=_('Default Value'), help_text=_('Default Parameter Value')) @@ -2133,6 +2139,7 @@ class BomItem(models.Model): # A link to the parent part # Each part will get a reverse lookup field 'bom_items' part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='bom_items', + verbose_name=_('Part'), help_text=_('Select parent part'), limit_choices_to={ 'assembly': True, @@ -2141,26 +2148,28 @@ class BomItem(models.Model): # A link to the child item (sub-part) # Each part will get a reverse lookup field 'used_in' sub_part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='used_in', + verbose_name=_('Sub part'), help_text=_('Select part to be used in BOM'), limit_choices_to={ 'component': True, }) # Quantity required - quantity = models.DecimalField(default=1.0, max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], help_text=_('BOM quantity for this BOM item')) + quantity = models.DecimalField(default=1.0, max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], verbose_name=_('Quantity'), help_text=_('BOM quantity for this BOM item')) - optional = models.BooleanField(default=False, help_text=_("This BOM item is optional")) + optional = models.BooleanField(default=False, verbose_name=_('Optional'), help_text=_("This BOM item is optional")) overage = models.CharField(max_length=24, blank=True, validators=[validators.validate_overage], + verbose_name=_('Overage'), help_text=_('Estimated build wastage quantity (absolute or percentage)') ) - reference = models.CharField(max_length=500, blank=True, help_text=_('BOM item reference')) + reference = models.CharField(max_length=500, blank=True, verbose_name=_('Reference'), help_text=_('BOM item reference')) # Note attached to this BOM line item - note = models.CharField(max_length=500, blank=True, help_text=_('BOM item notes')) + note = models.CharField(max_length=500, blank=True, verbose_name=_('Note'), help_text=_('BOM item notes')) - checksum = models.CharField(max_length=128, blank=True, help_text=_('BOM line checksum')) + checksum = models.CharField(max_length=128, blank=True, verbose_name=_('Checksum'), help_text=_('BOM line checksum')) inherited = models.BooleanField( default=False, @@ -2372,11 +2381,11 @@ class PartRelated(models.Model): """ Store and handle related parts (eg. mating connector, crimps, etc.) """ part_1 = models.ForeignKey(Part, related_name='related_parts_1', - on_delete=models.DO_NOTHING) + verbose_name=_('Part 1'), on_delete=models.DO_NOTHING) part_2 = models.ForeignKey(Part, related_name='related_parts_2', on_delete=models.DO_NOTHING, - help_text=_('Select Related Part')) + verbose_name=_('Part 2'), help_text=_('Select Related Part')) def __str__(self): return f'{self.part_1} <--> {self.part_2}' diff --git a/InvenTree/part/templates/part/bom.html b/InvenTree/part/templates/part/bom.html index f7b366bccb..dc345f9737 100644 --- a/InvenTree/part/templates/part/bom.html +++ b/InvenTree/part/templates/part/bom.html @@ -16,13 +16,13 @@ <div class='alert alert-block alert-info'> {% else %} <div class='alert alert-block alert-danger'> - The BOM for <i>{{ part.full_name }}</i> has changed, and must be validated.<br> + {% blocktrans with part=part.full_name %}The BOM for <i>{{ part }}</i> has changed, and must be validated.<br>{% endblocktrans %} {% endif %} - The BOM for <i>{{ part.full_name }}</i> was last checked by {{ part.bom_checked_by }} on {{ part.bom_checked_date }} + {% blocktrans with part=part.full_name checker=part.bom_checked_by check_date=part.bom_checked_date %}The BOM for <i>{{ part }}</i> was last checked by {{ checker }} on {{ check_date }}{% endblocktrans %} </div> {% else %} <div class='alert alert-danger alert-block'> - <b>The BOM for <i>{{ part.full_name }}</i> has not been validated.</b> + <b>{% blocktrans with part=part.full_name %}The BOM for <i>{{ part }}</i> has not been validated.{% endblocktrans %}</b> </div> {% endif %} diff --git a/InvenTree/part/templates/part/bom_upload/upload_file.html b/InvenTree/part/templates/part/bom_upload/upload_file.html index 05486ab0ac..148d32f5da 100644 --- a/InvenTree/part/templates/part/bom_upload/upload_file.html +++ b/InvenTree/part/templates/part/bom_upload/upload_file.html @@ -24,7 +24,7 @@ </div> <form method="post" action='' class='js-modal-form' enctype="multipart/form-data"> - <button type="submit" class="save btn btn-default">Upload File</button> + <button type="submit" class="save btn btn-default">{% trans 'Upload File' %}</button> {% csrf_token %} {% load crispy_forms_tags %} diff --git a/InvenTree/part/templates/part/bom_validate.html b/InvenTree/part/templates/part/bom_validate.html index 763d946bf2..6b3aff6eac 100644 --- a/InvenTree/part/templates/part/bom_validate.html +++ b/InvenTree/part/templates/part/bom_validate.html @@ -1,10 +1,12 @@ {% extends "modal_form.html" %} +{% load i18n %} + {% block pre_form_content %} -Confirm that the Bill of Materials (BOM) is valid for:<br><i>{{ part.full_name }}</i> +{% blocktrans with part.full_name as part %}Confirm that the Bill of Materials (BOM) is valid for:<br><i>{{ part }}</i>{% endblocktrans %} <div class='alert alert-warning alert-block'> - This will validate each line in the BOM. + {% trans 'This will validate each line in the BOM.' %} </div> {% endblock %} \ No newline at end of file diff --git a/InvenTree/part/views.py b/InvenTree/part/views.py index 0208636a48..4efff3e9e3 100644 --- a/InvenTree/part/views.py +++ b/InvenTree/part/views.py @@ -342,7 +342,7 @@ class PartSetCategory(AjaxUpdateView): data = { 'form_valid': valid, - 'success': _('Set category for {n} parts'.format(n=len(self.parts))) + 'success': _('Set category for {n} parts').format(n=len(self.parts)) } if valid: diff --git a/InvenTree/report/migrations/0015_auto_20210403_1837.py b/InvenTree/report/migrations/0015_auto_20210403_1837.py new file mode 100644 index 0000000000..0348db5b35 --- /dev/null +++ b/InvenTree/report/migrations/0015_auto_20210403_1837.py @@ -0,0 +1,35 @@ +# Generated by Django 3.0.7 on 2021-04-03 18:37 + +import django.core.validators +from django.db import migrations, models +import report.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0014_purchaseorderreport_salesorderreport'), + ] + + operations = [ + migrations.AlterField( + model_name='reportasset', + name='asset', + field=models.FileField(help_text='Report asset file', upload_to=report.models.rename_asset, verbose_name='Asset'), + ), + migrations.AlterField( + model_name='reportasset', + name='description', + field=models.CharField(help_text='Asset file description', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='reportsnippet', + name='description', + field=models.CharField(help_text='Snippet file description', max_length=250, verbose_name='Description'), + ), + migrations.AlterField( + model_name='reportsnippet', + name='snippet', + field=models.FileField(help_text='Report snippet file', upload_to=report.models.rename_snippet, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Snippet'), + ), + ] diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index a838396bf0..6f3891d6be 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -497,11 +497,12 @@ class ReportSnippet(models.Model): snippet = models.FileField( upload_to=rename_snippet, + verbose_name=_('Snippet'), help_text=_('Report snippet file'), validators=[FileExtensionValidator(allowed_extensions=['html', 'htm'])], ) - description = models.CharField(max_length=250, help_text=_("Snippet file description")) + description = models.CharField(max_length=250, verbose_name=_('Description'), help_text=_("Snippet file description")) def rename_asset(instance, filename): @@ -536,7 +537,8 @@ class ReportAsset(models.Model): asset = models.FileField( upload_to=rename_asset, + verbose_name=_('Asset'), help_text=_("Report asset file"), ) - description = models.CharField(max_length=250, help_text=_("Asset file description")) + description = models.CharField(max_length=250, verbose_name=_('Description'), help_text=_("Asset file description")) diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index a7a7955c22..1c04ae7d65 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -195,7 +195,7 @@ class StockCount(StockAdjust): if item['item'].stocktake(item['quantity'], request.user, notes=self.notes): n += 1 - return Response({'success': 'Updated stock for {n} items'.format(n=n)}) + return Response({'success': _('Updated stock for {n} items').format(n=n)}) class StockAdd(StockAdjust): @@ -264,7 +264,7 @@ class StockTransfer(StockAdjust): if item['item'].move(location, self.notes, request.user, quantity=item['quantity']): n += 1 - return Response({'success': 'Moved {n} parts to {loc}'.format( + return Response({'success': _('Moved {n} parts to {loc}').format( n=n, loc=str(location), )}) diff --git a/InvenTree/stock/forms.py b/InvenTree/stock/forms.py index 3560f205cc..c784b08a69 100644 --- a/InvenTree/stock/forms.py +++ b/InvenTree/stock/forms.py @@ -111,7 +111,8 @@ class CreateStockItemForm(HelperForm): """ Form for creating a new StockItem """ expiry_date = DatePickerFormField( - help_text=('Expiration date for this stock item'), + label=_('Expiry Date'), + help_text=_('Expiration date for this stock item'), ) serial_numbers = forms.CharField(label=_('Serial Numbers'), required=False, help_text=_('Enter unique serial numbers (or leave blank)')) @@ -165,13 +166,13 @@ class CreateStockItemForm(HelperForm): class SerializeStockForm(HelperForm): """ Form for serializing a StockItem. """ - destination = TreeNodeChoiceField(queryset=StockLocation.objects.all(), label='Destination', required=True, help_text='Destination for serialized stock (by default, will remain in current location)') + destination = TreeNodeChoiceField(queryset=StockLocation.objects.all(), label=_('Destination'), required=True, help_text=_('Destination for serialized stock (by default, will remain in current location)')) - serial_numbers = forms.CharField(label='Serial numbers', required=True, help_text='Unique serial numbers (must match quantity)') + serial_numbers = forms.CharField(label=_('Serial numbers'), required=True, help_text=_('Unique serial numbers (must match quantity)')) - note = forms.CharField(label='Notes', required=False, help_text='Add transaction note (optional)') + note = forms.CharField(label=_('Notes'), required=False, help_text=_('Add transaction note (optional)')) - quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5) + quantity = RoundingDecimalFormField(max_digits=10, decimal_places=5, label=_('Quantity')) def __init__(self, *args, **kwargs): @@ -263,7 +264,7 @@ class ExportOptionsForm(HelperForm): file_format = forms.ChoiceField(label=_('File Format'), help_text=_('Select output file format')) - include_sublocations = forms.BooleanField(required=False, initial=True, help_text=_("Include stock items in sub locations")) + include_sublocations = forms.BooleanField(required=False, initial=True, label=_('Include sublocations'), help_text=_("Include stock items in sub locations")) class Meta: model = StockLocation @@ -402,7 +403,8 @@ class EditStockItemForm(HelperForm): """ expiry_date = DatePickerFormField( - help_text=('Expiration date for this stock item'), + label=_('Expiry Date'), + help_text=_('Expiration date for this stock item'), ) class Meta: diff --git a/InvenTree/stock/migrations/0059_auto_20210403_1210.py b/InvenTree/stock/migrations/0059_auto_20210404_2016.py similarity index 69% rename from InvenTree/stock/migrations/0059_auto_20210403_1210.py rename to InvenTree/stock/migrations/0059_auto_20210404_2016.py index ae11eb7536..b027a53854 100644 --- a/InvenTree/stock/migrations/0059_auto_20210403_1210.py +++ b/InvenTree/stock/migrations/0059_auto_20210404_2016.py @@ -1,9 +1,10 @@ -# Generated by Django 3.0.7 on 2021-04-03 12:10 +# Generated by Django 3.0.7 on 2021-04-04 20:16 import InvenTree.fields import InvenTree.models import InvenTree.validators from django.conf import settings +import django.core.validators from django.db import migrations, models import django.db.models.deletion import mptt.fields @@ -12,11 +13,22 @@ import mptt.fields class Migration(migrations.Migration): dependencies = [ + ('users', '0005_owner_model'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('stock', '0058_stockitem_packaging'), ] operations = [ + migrations.AlterField( + model_name='stockitem', + name='delete_on_deplete', + field=models.BooleanField(default=True, help_text='Delete this Stock Item when stock is depleted', verbose_name='Delete on deplete'), + ), + migrations.AlterField( + model_name='stockitem', + name='owner', + field=models.ForeignKey(blank=True, help_text='Select Owner', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stock_items', to='users.Owner', verbose_name='Owner'), + ), migrations.AlterField( model_name='stockitemattachment', name='attachment', @@ -47,6 +59,11 @@ class Migration(migrations.Migration): name='notes', field=models.CharField(blank=True, help_text='Entry notes', max_length=512, verbose_name='Notes'), ), + migrations.AlterField( + model_name='stockitemtracking', + name='quantity', + field=models.DecimalField(decimal_places=5, default=1, max_digits=15, validators=[django.core.validators.MinValueValidator(0)], verbose_name='Quantity'), + ), migrations.AlterField( model_name='stockitemtracking', name='title', @@ -62,6 +79,11 @@ class Migration(migrations.Migration): name='name', field=models.CharField(help_text='Name', max_length=100, validators=[InvenTree.validators.validate_tree_name], verbose_name='Name'), ), + migrations.AlterField( + model_name='stocklocation', + name='owner', + field=models.ForeignKey(blank=True, help_text='Select Owner', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stock_locations', to='users.Owner', verbose_name='Owner'), + ), migrations.AlterField( model_name='stocklocation', name='parent', diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index df767a3a70..b57f96d0f7 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -51,7 +51,8 @@ class StockLocation(InvenTreeTree): """ owner = models.ForeignKey(Owner, on_delete=models.SET_NULL, blank=True, null=True, - help_text='Select Owner', + verbose_name=_('Owner'), + help_text=_('Select Owner'), related_name='stock_locations') def get_absolute_url(self): @@ -483,7 +484,7 @@ class StockItem(MPTTModel): review_needed = models.BooleanField(default=False) - delete_on_deplete = models.BooleanField(default=True, help_text=_('Delete this Stock Item when stock is depleted')) + delete_on_deplete = models.BooleanField(default=True, verbose_name=_('Delete on deplete'), help_text=_('Delete this Stock Item when stock is depleted')) status = models.PositiveIntegerField( default=StockStatus.OK, @@ -507,7 +508,8 @@ class StockItem(MPTTModel): ) owner = models.ForeignKey(Owner, on_delete=models.SET_NULL, blank=True, null=True, - help_text='Select Owner', + verbose_name=_('Owner'), + help_text=_('Select Owner'), related_name='stock_items') def is_stale(self): @@ -948,7 +950,7 @@ class StockItem(MPTTModel): raise ValidationError({"quantity": _("Quantity must be greater than zero")}) if quantity > self.quantity: - raise ValidationError({"quantity": _("Quantity must not exceed available stock quantity ({n})".format(n=self.quantity))}) + raise ValidationError({"quantity": _("Quantity must not exceed available stock quantity ({n})").format(n=self.quantity)}) if not type(serials) in [list, tuple]: raise ValidationError({"serial_numbers": _("Serial numbers must be a list of integers")}) @@ -989,7 +991,7 @@ class StockItem(MPTTModel): new_item.addTransactionNote(_('Add serial number'), user, notes=notes) # Remove the equivalent number of items - self.take_stock(quantity, user, notes=_('Serialized {n} items'.format(n=quantity))) + self.take_stock(quantity, user, notes=_('Serialized {n} items').format(n=quantity)) @transaction.atomic def copyHistoryFrom(self, other): @@ -1558,7 +1560,7 @@ class StockItemTracking(models.Model): system = models.BooleanField(default=False) - quantity = models.DecimalField(max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], default=1) + quantity = models.DecimalField(max_digits=15, decimal_places=5, validators=[MinValueValidator(0)], default=1, verbose_name=_('Quantity')) # TODO # image = models.ImageField(upload_to=func, max_length=255, null=True, blank=True) diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index eeee13ad3a..72395a54d0 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -965,7 +965,7 @@ class StockAdjust(AjaxView, FormMixin): context['stock_action'] = self.stock_action.strip().lower() - context['stock_action_title'] = self.stock_action.capitalize() + context['stock_action_title'] = self.stock_action_title # Quantity column will be read-only in some circumstances context['edit_quantity'] = not self.stock_action == 'delete' @@ -993,17 +993,18 @@ class StockAdjust(AjaxView, FormMixin): if self.stock_action not in ['move', 'count', 'take', 'add', 'delete']: self.stock_action = 'count' - # Choose the form title based on the action + # Choose form title and action column based on the action titles = { - 'move': _('Move Stock Items'), - 'count': _('Count Stock Items'), - 'take': _('Remove From Stock'), - 'add': _('Add Stock Items'), - 'delete': _('Delete Stock Items') + 'move': [_('Move Stock Items'), _('Move')], + 'count': [_('Count Stock Items'), _('Count')], + 'take': [_('Remove From Stock'), _('Take')], + 'add': [_('Add Stock Items'), _('Add')], + 'delete': [_('Delete Stock Items'), _('Delete')], } - self.ajax_form_title = titles[self.stock_action] - + self.ajax_form_title = titles[self.stock_action][0] + self.stock_action_title = titles[self.stock_action][1] + # Save list of items! self.stock_items = self.get_GET_items() @@ -1039,7 +1040,7 @@ class StockAdjust(AjaxView, FormMixin): if self.stock_action in ['move', 'take']: if item.new_quantity > item.quantity: - item.error = _('Quantity must not exceed {x}'.format(x=item.quantity)) + item.error = _('Quantity must not exceed {x}').format(x=item.quantity) valid = False continue @@ -1118,7 +1119,7 @@ class StockAdjust(AjaxView, FormMixin): count += 1 - return f"{_('Added stock to ')} {count} {_('items')}" + return _('Added stock to {n} items').format(n=count) def do_take(self): @@ -1133,7 +1134,7 @@ class StockAdjust(AjaxView, FormMixin): count += 1 - return f"{_('Removed stock from ')} {count} {_('items')}" + return _('Removed stock from {n} items').format(n=count) def do_count(self): @@ -1189,9 +1190,9 @@ class StockAdjust(AjaxView, FormMixin): return _('No items were moved') else: - return _('Moved {n} items to {dest}'.format( + return _('Moved {n} items to {dest}').format( n=count, - dest=destination.pathstring)) + dest=destination.pathstring) def do_delete(self): """ Delete multiple stock items """ @@ -1208,7 +1209,7 @@ class StockAdjust(AjaxView, FormMixin): count += 1 - return _("Deleted {n} stock items".format(n=count)) + return _("Deleted {n} stock items").format(n=count) class StockItemEdit(AjaxUpdateView): From efd14fca6498ef9c27a9c767c944dd4a0877d216 Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sun, 4 Apr 2021 22:47:01 +0200 Subject: [PATCH 10/16] made translation lazy --- InvenTree/InvenTree/fields.py | 2 +- InvenTree/InvenTree/helpers.py | 2 +- InvenTree/InvenTree/status.py | 2 +- InvenTree/InvenTree/status_codes.py | 2 +- InvenTree/barcodes/api.py | 2 +- InvenTree/common/views.py | 2 +- InvenTree/company/views.py | 2 +- InvenTree/label/api.py | 2 +- InvenTree/order/views.py | 2 +- InvenTree/report/api.py | 2 +- InvenTree/stock/api.py | 1 + 11 files changed, 11 insertions(+), 10 deletions(-) diff --git a/InvenTree/InvenTree/fields.py b/InvenTree/InvenTree/fields.py index c0e1633ac7..d3f60b87df 100644 --- a/InvenTree/InvenTree/fields.py +++ b/InvenTree/InvenTree/fields.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals from .validators import allowable_url_schemes -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.forms.fields import URLField as FormURLField from django.db import models as models diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index 930204c58c..c2441590f5 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -13,7 +13,7 @@ from decimal import Decimal from wsgiref.util import FileWrapper from django.http import StreamingHttpResponse from django.core.exceptions import ValidationError, FieldError -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import Permission diff --git a/InvenTree/InvenTree/status.py b/InvenTree/InvenTree/status.py index ec2422a254..646ebb8131 100644 --- a/InvenTree/InvenTree/status.py +++ b/InvenTree/InvenTree/status.py @@ -2,7 +2,7 @@ Provides system status functionality checks. """ -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ import logging diff --git a/InvenTree/InvenTree/status_codes.py b/InvenTree/InvenTree/status_codes.py index 916b3341cb..5eb97504c6 100644 --- a/InvenTree/InvenTree/status_codes.py +++ b/InvenTree/InvenTree/status_codes.py @@ -1,4 +1,4 @@ -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ class StatusCode: diff --git a/InvenTree/barcodes/api.py b/InvenTree/barcodes/api.py index d727f5a778..e6b3ea84e3 100644 --- a/InvenTree/barcodes/api.py +++ b/InvenTree/barcodes/api.py @@ -2,7 +2,7 @@ from django.urls import reverse from django.conf.urls import url -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from rest_framework.exceptions import ValidationError from rest_framework import permissions diff --git a/InvenTree/common/views.py b/InvenTree/common/views.py index 1f3c827532..31d11e30cc 100644 --- a/InvenTree/common/views.py +++ b/InvenTree/common/views.py @@ -5,7 +5,7 @@ Django views for interacting with common models # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.forms import CheckboxInput, Select from InvenTree.views import AjaxUpdateView diff --git a/InvenTree/company/views.py b/InvenTree/company/views.py index 42457d6101..bb16ea4bb6 100644 --- a/InvenTree/company/views.py +++ b/InvenTree/company/views.py @@ -6,7 +6,7 @@ Django views for interacting with Company app # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.views.generic import DetailView, ListView, UpdateView from django.urls import reverse diff --git a/InvenTree/label/api.py b/InvenTree/label/api.py index e303f493c6..0d0d71b50d 100644 --- a/InvenTree/label/api.py +++ b/InvenTree/label/api.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.conf.urls import url, include from django.core.exceptions import ValidationError, FieldError from django.http import HttpResponse diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index bdf0407603..f8ac3a9e19 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -9,7 +9,7 @@ from django.db import transaction from django.shortcuts import get_object_or_404 from django.core.exceptions import ValidationError from django.urls import reverse -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.views.generic import DetailView, ListView, UpdateView from django.views.generic.edit import FormMixin from django.forms import HiddenInput diff --git a/InvenTree/report/api.py b/InvenTree/report/api.py index 212c57bd7f..0925cc5249 100644 --- a/InvenTree/report/api.py +++ b/InvenTree/report/api.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.utils.translation import ugettext as _ +from django.utils.translation import ugettext_lazy as _ from django.conf.urls import url, include from django.core.exceptions import ValidationError, FieldError from django.http import HttpResponse diff --git a/InvenTree/stock/api.py b/InvenTree/stock/api.py index 1c04ae7d65..7bad9df83e 100644 --- a/InvenTree/stock/api.py +++ b/InvenTree/stock/api.py @@ -11,6 +11,7 @@ from django.conf.urls import url, include from django.urls import reverse from django.http import JsonResponse from django.db.models import Q +from django.utils.translation import ugettext_lazy as _ from .models import StockLocation, StockItem from .models import StockItemTracking From adcb211572355727974a8292157109ca0d96cac2 Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sun, 4 Apr 2021 22:48:36 +0200 Subject: [PATCH 11/16] set language in the used js scripts --- InvenTree/build/templates/build/index.html | 1 + InvenTree/order/templates/order/purchase_orders.html | 1 + InvenTree/order/templates/order/sales_orders.html | 1 + InvenTree/templates/base.html | 2 ++ 4 files changed, 5 insertions(+) diff --git a/InvenTree/build/templates/build/index.html b/InvenTree/build/templates/build/index.html index 75dc497b4b..f710928ee7 100644 --- a/InvenTree/build/templates/build/index.html +++ b/InvenTree/build/templates/build/index.html @@ -130,6 +130,7 @@ InvenTree | {% trans "Build Orders" %} initialView: 'dayGridMonth', nowIndicator: true, aspectRatio: 2.5, + locale: '{{request.LANGUAGE_CODE}}', datesSet: function() { loadOrderEvents(calendar); } diff --git a/InvenTree/order/templates/order/purchase_orders.html b/InvenTree/order/templates/order/purchase_orders.html index 6667cbd437..7256a1c499 100644 --- a/InvenTree/order/templates/order/purchase_orders.html +++ b/InvenTree/order/templates/order/purchase_orders.html @@ -116,6 +116,7 @@ InvenTree | {% trans "Purchase Orders" %} initialView: 'dayGridMonth', nowIndicator: true, aspectRatio: 2.5, + locale: '{{request.LANGUAGE_CODE}}', datesSet: function() { loadOrderEvents(calendar); } diff --git a/InvenTree/order/templates/order/sales_orders.html b/InvenTree/order/templates/order/sales_orders.html index 6d4be9fff6..bcaf6a019c 100644 --- a/InvenTree/order/templates/order/sales_orders.html +++ b/InvenTree/order/templates/order/sales_orders.html @@ -115,6 +115,7 @@ InvenTree | {% trans "Sales Orders" %} initialView: 'dayGridMonth', nowIndicator: true, aspectRatio: 2.5, + locale: '{{request.LANGUAGE_CODE}}', datesSet: function() { loadOrderEvents(calendar); }, diff --git a/InvenTree/templates/base.html b/InvenTree/templates/base.html index aa571ef19a..140971a8ce 100644 --- a/InvenTree/templates/base.html +++ b/InvenTree/templates/base.html @@ -134,6 +134,7 @@ InvenTree <script type='text/javascript' src='{% static "bootstrap-table/extensions/treegrid/bootstrap-table-treegrid.js" %}'></script> <script type="text/javascript" src="{% static 'fullcalendar/main.js' %}"></script> +<script type="text/javascript" src="{% static 'fullcalendar/locales-all.js' %}"></script> <script type="text/javascript" src="{% static 'script/select2/select2.js' %}"></script> <script type='text/javascript' src="{% static 'script/moment.js' %}"></script> @@ -180,6 +181,7 @@ $(document).ready(function () { }); {% endif %} + moment.locale('{{request.LANGUAGE_CODE}}'); }); </script> From ef64d1e61d605dfa4e28222db1032d6bbfe3aca1 Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sun, 4 Apr 2021 22:49:17 +0200 Subject: [PATCH 12/16] added label to DatePickerFormField --- InvenTree/InvenTree/fields.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/fields.py b/InvenTree/InvenTree/fields.py index d3f60b87df..155f77c639 100644 --- a/InvenTree/InvenTree/fields.py +++ b/InvenTree/InvenTree/fields.py @@ -42,6 +42,7 @@ class DatePickerFormField(forms.DateField): def __init__(self, **kwargs): help_text = kwargs.get('help_text', _('Enter date')) + label = kwargs.get('label', None) required = kwargs.get('required', False) initial = kwargs.get('initial', None) @@ -56,7 +57,8 @@ class DatePickerFormField(forms.DateField): required=required, initial=initial, help_text=help_text, - widget=widget + widget=widget, + label=label ) From 2c053eae4c69695eb598ac12a94921daf8bb8c3f Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sun, 4 Apr 2021 22:49:47 +0200 Subject: [PATCH 13/16] added translations --- InvenTree/order/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/InvenTree/order/views.py b/InvenTree/order/views.py index f8ac3a9e19..7dc8b4efff 100644 --- a/InvenTree/order/views.py +++ b/InvenTree/order/views.py @@ -1057,7 +1057,7 @@ class OrderParts(AjaxView): data = { 'form_valid': valid, - 'success': 'Ordered {n} parts'.format(n=len(self.parts)) + 'success': _('Ordered {n} parts').format(n=len(self.parts)) } return self.renderJsonResponse(self.request, data=data) @@ -1348,7 +1348,7 @@ class SalesOrderAssignSerials(AjaxView, FormMixin): 'form_valid': valid, 'form_errors': self.form.errors.as_json(), 'non_field_errors': self.form.non_field_errors().as_json(), - 'success': _("Allocated") + f" {len(self.stock_items)} " + _("items") + 'success': _("Allocated {n} items").format(n=len(self.stock_items)) } return self.renderJsonResponse(request, self.form, data) From 530b90042a72c4fa9007e5efe995ac0e5d1e23d8 Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Sun, 4 Apr 2021 22:51:16 +0200 Subject: [PATCH 14/16] added german(de) translations --- InvenTree/locale/de/LC_MESSAGES/django.po | 376 ++++++++++------------ 1 file changed, 169 insertions(+), 207 deletions(-) diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po index fef729ffa5..41a8cc7ab5 100644 --- a/InvenTree/locale/de/LC_MESSAGES/django.po +++ b/InvenTree/locale/de/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-04-04 20:22+0000\n" +"POT-Creation-Date: 2021-04-04 20:24+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" @@ -42,10 +42,8 @@ msgid "Confirm" msgstr "Bestätigen" #: InvenTree/forms.py:126 -#, fuzzy -#| msgid "Confirm item deletion" msgid "Confirm delete" -msgstr "Löschung von Position bestätigen" +msgstr "Löschung bestätigen" #: InvenTree/forms.py:127 msgid "Confirm item deletion" @@ -60,10 +58,8 @@ msgid "Enter new password" msgstr "Neues Passwort eingeben" #: InvenTree/forms.py:167 -#, fuzzy -#| msgid "Confirm new password" msgid "Confirm password" -msgstr "Neues Passwort bestätigen" +msgstr "Passwort wiederholen" #: InvenTree/forms.py:168 msgid "Confirm new password" @@ -268,10 +264,9 @@ msgid "Invalid character in part name" msgstr "Ungültiger Buchstabe im Teilenamen" #: InvenTree/validators.py:63 -#, fuzzy, python-brace-format -#| msgid "IPN must match regex pattern" +#, python-brace-format msgid "IPN must match regex pattern {pat}" -msgstr "IPN muss zu Regex-Muster passen" +msgstr "IPN muss zu Regex-Muster {pat} passen" #: InvenTree/validators.py:77 InvenTree/validators.py:91 #: InvenTree/validators.py:105 @@ -421,7 +416,7 @@ msgstr "Anzahl der zu bauenden Teile" #: build/forms.py:88 msgid "Enter quantity for build output" -msgstr "Menge für den Bau-Ausgabe angeben" +msgstr "Menge der Endprodukte angeben" #: build/forms.py:92 order/forms.py:233 stock/forms.py:118 msgid "Serial Numbers" @@ -429,11 +424,11 @@ msgstr "Seriennummer" #: build/forms.py:94 msgid "Enter serial numbers for build outputs" -msgstr "Seriennummer für dieses hergestelltes Teil eingeben" +msgstr "Seriennummer für dieses Endprodukt eingeben" #: build/forms.py:100 msgid "Confirm creation of build output" -msgstr "Anlage Baufertigstellung bestätigen" +msgstr "Anlage von Endprodukt(en) bestätigen" #: build/forms.py:121 msgid "Confirm deletion of build output" @@ -449,7 +444,7 @@ msgstr "Bestandszuordnung bestätigen" #: build/forms.py:189 msgid "Mark build as complete" -msgstr "Bau als vollständig markieren" +msgstr "Bauauftrag als vollständig markieren" #: build/forms.py:213 build/templates/build/auto_allocate.html:18 #: order/forms.py:82 stock/forms.py:347 @@ -463,13 +458,11 @@ msgstr "Lagerort" #: build/forms.py:214 msgid "Location of completed parts" -msgstr "Lagerort der fertigen Teile" +msgstr "Lagerort der Endprodukte" #: build/forms.py:219 -#, fuzzy -#| msgid "Confirm build completion" msgid "Confirm incomplete" -msgstr "Bau-Fertigstellung bestätigen" +msgstr "Bauauftrag nicht fertiggestellt" #: build/forms.py:220 msgid "Confirm completion with incomplete stock allocation" @@ -477,13 +470,11 @@ msgstr "Fertigstellung mit nicht kompletter Bestandszuordnung bestätigen" #: build/forms.py:223 msgid "Confirm build completion" -msgstr "Bau-Fertigstellung bestätigen" +msgstr "Bauauftrag-Fertigstellung bestätigen" #: build/forms.py:243 -#, fuzzy -#| msgid "Confirm build cancellation" msgid "Confirm cancel" -msgstr "Bauabbruch bestätigen" +msgstr "Abbruch bestätigen" #: build/forms.py:243 build/views.py:66 msgid "Confirm build cancellation" @@ -491,7 +482,7 @@ msgstr "Bauabbruch bestätigen" #: build/forms.py:257 msgid "Select quantity of stock to allocate" -msgstr "Menge der BestandsObjekt für Zuordnung auswählen" +msgstr "Menge der BestandsObjekte für Zuordnung auswählen" #: build/models.py:65 build/templates/build/build_base.html:8 #: build/templates/build/build_base.html:35 @@ -534,7 +525,7 @@ msgstr "Eltern-Bauauftrag" #: build/models.py:147 msgid "BuildOrder to which this build is allocated" -msgstr "Bauauftrag, zu dem dieser Bau zugwiesen ist" +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 @@ -564,7 +555,7 @@ msgstr "Teil" #: build/models.py:160 msgid "Select part to build" -msgstr "Teil für den Bau wählen" +msgstr "Teil für den Bauauftrag wählen" #: build/models.py:165 msgid "Sales Order Reference" @@ -572,7 +563,7 @@ msgstr "Auftrag Referenz" #: build/models.py:169 msgid "SalesOrder to which this build is allocated" -msgstr "Bestellung, die diesem Bau zugewiesen ist" +msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" #: build/models.py:174 msgid "Source Location" @@ -583,7 +574,7 @@ msgid "" "Select location to take stock from for this build (leave blank to take from " "any stock location)" msgstr "" -"Entnahme-Lagerort für diesen Bau wählen (oder leer lassen für einen " +"Entnahme-Lagerort für diesen Bauauftrag wählen (oder leer lassen für einen " "beliebigen Lagerort)" #: build/models.py:183 @@ -592,7 +583,7 @@ msgstr "Ziel-Lagerort" #: build/models.py:187 msgid "Select location where the completed items will be stored" -msgstr "Lagerort wo fertige Objekte gelagert werden auswählen" +msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" #: build/models.py:191 msgid "Build Quantity" @@ -756,7 +747,7 @@ msgstr "Bauauftrag" #: build/models.py:1083 msgid "Build to allocate parts" -msgstr "Bau starten um Teile zuzuweisen" +msgstr "Bauauftrag starten um Teile zuzuweisen" #: build/models.py:1090 part/templates/part/allocation.html:18 #: part/templates/part/allocation.html:24 @@ -776,13 +767,11 @@ msgstr "Quell-BestandsObjekt" #: build/models.py:1104 msgid "Stock quantity to allocate to build" -msgstr "BestandsObjekt-Anzahl dem Bau zuweisen" +msgstr "BestandsObjekt-Anzahl dem Bauauftrag zuweisen" #: build/models.py:1112 -#, fuzzy -#| msgid "Install item" msgid "Install into" -msgstr "Installiere Objekt" +msgstr "Installiere in" #: build/models.py:1113 msgid "Destination stock item" @@ -790,7 +779,7 @@ msgstr "Ziel-BestandsObjekt" #: build/templates/build/allocate.html:15 msgid "Incomplete Build Ouputs" -msgstr "unfertige Endpordukte" +msgstr "unfertige Endprodukte" #: build/templates/build/allocate.html:21 msgid "Build order has been completed" @@ -806,7 +795,7 @@ msgstr "Neues Endprodukt anlegen" #: build/templates/build/allocate.html:30 msgid "Order required parts" -msgstr "benötigte Teile bestellen" +msgstr "Benötigte Teile bestellen" #: build/templates/build/allocate.html:31 #: company/templates/company/detail_part.html:31 order/views.py:794 @@ -856,12 +845,12 @@ msgstr "" #: build/templates/build/auto_allocate.html:37 msgid "No stock items found that can be automatically allocated to this build" msgstr "" -"Keine BestandsObjekt gefunden, die diesem Endprodukt automatisch zugewiesen " +"Keine BestandsObjekte gefunden, die diesem Endprodukt automatisch zugewiesen " "werden können" #: build/templates/build/auto_allocate.html:39 msgid "Stock items will have to be manually allocated" -msgstr "BestandsObjekte werden manuell zugewiesen werden müssen" +msgstr "BestandsObjekte müssen manuell zugewiesen werden" #: build/templates/build/build_base.html:14 msgid "This Build Order is allocated to Sales Order" @@ -907,17 +896,17 @@ msgstr "Bau-Auftrag Aktionen" #: build/templates/build/build_base.html:66 msgid "Edit Build" -msgstr "Bau bearbeiten" +msgstr "Bauauftrag bearbeiten" #: build/templates/build/build_base.html:68 #: build/templates/build/build_base.html:176 msgid "Complete Build" -msgstr "Bau fertigstellen" +msgstr "Bauauftrag fertigstellen" #: build/templates/build/build_base.html:69 #: build/templates/build/build_base.html:167 build/views.py:57 msgid "Cancel Build" -msgstr "Bau abbrechen" +msgstr "Bauauftrag abbrechen" #: build/templates/build/build_base.html:82 #: build/templates/build/detail.html:11 @@ -990,7 +979,7 @@ msgstr "Nachverfolgbare Teile können Seriennummern haben" #: build/templates/build/build_output_create.html:16 msgid "Enter serial numbers to generate multiple single build outputs" -msgstr "Seriennummeren für mehrere einlene Endprodukte angeben" +msgstr "Seriennummeren für mehrere einzelne Endprodukte angeben" #: build/templates/build/cancel.html:5 msgid "Are you sure you wish to cancel this build?" @@ -1108,13 +1097,13 @@ msgstr "Bauaufträge ausdrucken" #: order/templates/order/purchase_orders.html:27 #: order/templates/order/sales_orders.html:27 msgid "Display calendar view" -msgstr "Kalendar Ansicht" +msgstr "Kalender-Ansicht" #: build/templates/build/index.html:46 #: order/templates/order/purchase_orders.html:30 #: order/templates/order/sales_orders.html:30 msgid "Display list view" -msgstr "Listen Ansicht" +msgstr "Listen-Ansicht" #: build/templates/build/navbar.html:12 msgid "Build Order Details" @@ -1130,7 +1119,7 @@ msgstr "Details" #: build/templates/build/navbar.html:20 build/templates/build/navbar.html:23 #: build/templates/build/parts.html:11 msgid "Required Parts" -msgstr "benötigte Teile" +msgstr "Benötigte Teile" #: build/templates/build/navbar.html:27 build/templates/build/navbar.html:30 msgid "In Progress" @@ -1166,8 +1155,8 @@ msgstr "Speichern" #: build/templates/build/unallocate.html:10 msgid "Are you sure you wish to unallocate all stock for this build?" msgstr "" -"Sind Sie sicher, dass sie alle BestandsObjekt von diesem Bau entfernen " -"möchten?" +"Sind Sie sicher, dass sie alle BestandsObjekt von diesem Bauauftrag " +"entfernen möchten?" #: build/templates/build/unallocate.html:12 msgid "All incomplete stock allocations will be removed from the build" @@ -1176,7 +1165,7 @@ msgstr "" #: build/views.py:77 msgid "Build was cancelled" -msgstr "Bau wurde abgebrochen" +msgstr "Bauauftrag wurde abgebrochen" #: build/views.py:91 msgid "Allocate Stock" @@ -1254,7 +1243,7 @@ msgstr "Endprodukt fertiggestellt" #: build/views.py:711 msgid "Created new build" -msgstr "Neuen Bau angelegt" +msgstr "Neuen Bauauftrag angelegt" #: build/views.py:732 msgid "Edit Build Order Details" @@ -1262,7 +1251,7 @@ msgstr "Bauauftragdetails bearbeiten" #: build/views.py:765 msgid "Edited build" -msgstr "Bau bearbeitet" +msgstr "Bauauftrag bearbeitet" #: build/views.py:774 msgid "Delete Build Order" @@ -1404,7 +1393,7 @@ msgstr "Teil-Stückliste kopieren" #: common/models.py:116 msgid "Copy BOM data by default when duplicating a part" -msgstr "Stückliste beim Duplizieren von Teil kopieren" +msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " #: common/models.py:122 msgid "Copy Part Parameter Data" @@ -1523,7 +1512,7 @@ msgstr "Seitengröße" #: common/models.py:214 msgid "Default page size for PDF reports" -msgstr "Standardseitenformat für PDF Report" +msgstr "Standardseitenformat für PDF-Bericht" #: common/models.py:224 msgid "Test Reports" @@ -1709,7 +1698,7 @@ msgstr "Einzelpreis" #: company/forms.py:101 msgid "Single quantity price" -msgstr "Einzelpreis" +msgstr "Preis für eine Einheit" #: company/models.py:99 msgid "Company description" @@ -1772,10 +1761,8 @@ msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" #: company/models.py:126 part/models.py:753 -#, fuzzy -#| msgid "Image URL" msgid "Image" -msgstr "Bild-URL" +msgstr "Bild" #: company/models.py:131 msgid "is customer" @@ -1873,7 +1860,7 @@ msgstr "Notiz" #: company/models.py:371 msgid "base cost" -msgstr "" +msgstr "Basiskosten" #: company/models.py:371 msgid "Minimum charge (e.g. stocking fee)" @@ -1894,10 +1881,8 @@ msgid "multiple" msgstr "Vielfache" #: company/models.py:375 -#, fuzzy -#| msgid "multiple" msgid "Order multiple" -msgstr "Vielfache" +msgstr "Mehrere bestellen" #: company/templates/company/assigned_stock.html:10 #: company/templates/company/navbar.html:51 @@ -1944,10 +1929,9 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/delete.html:7 -#, fuzzy, python-format -#| msgid "Are you sure you want to delete category" +#, python-format msgid "Are you sure you want to delete company '%(name)s'?" -msgstr "Sind Sie sicher, dass Sie diese Kategorie löschen wollen" +msgstr "Sind Sie sicher, dass Sie die Firma '%(name)s' löschen wollen?" #: company/templates/company/delete.html:12 #, python-format @@ -2352,10 +2336,8 @@ msgid "Label template is enabled" msgstr "Label-Vorlage ist aktiviert" #: label/models.py:129 -#, fuzzy -#| msgid "Height [mm]" msgid "Width [mm]" -msgstr "Höhe [mm]" +msgstr "Breite [mm]" #: label/models.py:130 msgid "Label width, specified in mm" @@ -2466,10 +2448,8 @@ msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" #: order/models.py:201 -#, fuzzy -#| msgid "Received" msgid "received by" -msgstr "Empfangen" +msgstr "Empfangen von" #: order/models.py:206 msgid "Issue Date" @@ -2514,8 +2494,6 @@ msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" #: order/models.py:447 -#, fuzzy -#| msgid "Customer Reference" msgid "Customer Reference " msgstr "Kundenreferenz" @@ -2528,10 +2506,8 @@ msgid "Shipment Date" msgstr "Versanddatum" #: order/models.py:462 -#, fuzzy -#| msgid "Shipped" msgid "shipped by" -msgstr "Versendet" +msgstr "Versand von" #: order/models.py:506 msgid "SalesOrder cannot be shipped as it is not currently pending" @@ -2580,11 +2556,11 @@ msgstr "Empfangene Objekt-Anzahl" #: order/models.py:648 stock/models.py:506 #: stock/templates/stock/item_base.html:316 msgid "Purchase Price" -msgstr "EK-Preis" +msgstr "Preis" #: order/models.py:649 msgid "Unit purchase price" -msgstr "EK-Preis pro Einheit" +msgstr "Preis pro Einheit" #: order/models.py:743 order/models.py:745 msgid "Stock item has not been assigned" @@ -2611,10 +2587,8 @@ msgid "Line" msgstr "Position" #: order/models.py:780 -#, fuzzy -#| msgid "Items" msgid "Item" -msgstr "Positionen" +msgstr "Position" #: order/models.py:781 msgid "Select stock item to allocate" @@ -2638,7 +2612,7 @@ msgstr "Drucken" #: order/templates/order/order_base.html:43 #: order/templates/order/sales_order_base.html:52 msgid "Edit order information" -msgstr "Bestellinfos bearbeiten" +msgstr "Bestellung bearbeiten" #: order/templates/order/order_base.html:51 msgid "Receive items" @@ -2675,19 +2649,15 @@ msgstr "" "Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist." #: order/templates/order/order_complete.html:7 -#, fuzzy -#| msgid "Mark order as complete" msgid "Mark this order as complete?" -msgstr "Bestellung als vollständig markieren" +msgstr "Diese Bestellung als vollständig markieren?" #: order/templates/order/order_issue.html:7 -#, fuzzy -#| msgid "" -#| "Cancelling this order means that the order will no longer be editable." msgid "" "After placing this purchase order, line items will no longer be editable." msgstr "" -"Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist." +"Nachdem diese Bestellung plaziert ist können die Positionen nicht länger " +"bearbeitbar ist." #: order/templates/order/order_notes.html:13 msgid "Order Notes" @@ -2888,14 +2858,12 @@ msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" #: order/templates/order/sales_order_detail.html:170 -#, fuzzy -#| msgid "No matching results" msgid "No matching line items" -msgstr "Keine passenden Ergebnisse gefunden" +msgstr "Keine passenden Positionen gefunden" #: order/templates/order/sales_order_detail.html:199 msgid "ID" -msgstr "" +msgstr "ID" #: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523 #: templates/js/build.js:785 @@ -3071,10 +3039,9 @@ msgid "No lines specified" msgstr "Keine Zeilen angegeben" #: order/views.py:1060 -#, fuzzy, python-brace-format -#| msgid "Order parts" +#, python-brace-format msgid "Ordered {n} parts" -msgstr "Teile bestellen" +msgstr "{n} Teile bestellt" #: order/views.py:1117 msgid "Supplier part must be specified" @@ -3101,10 +3068,9 @@ msgid "Allocate Serial Numbers" msgstr "Seriennummern zuweisen" #: order/views.py:1351 -#, fuzzy, python-brace-format -#| msgid "Allocated to Orders" +#, python-brace-format msgid "Allocated {n} items" -msgstr "zu Bauaufträgen zugeordnet" +msgstr "{n} Positionen zugeordnet" #: order/views.py:1367 msgid "Select line item" @@ -3222,20 +3188,16 @@ msgid "Confirm BOM duplication" msgstr "Kopie von Stückliste bestätigen" #: part/forms.py:151 -#, fuzzy -#| msgid "Validate BOM" msgid "validate" -msgstr "BOM validieren" +msgstr "kontrollieren" #: part/forms.py:151 msgid "Confirm that the BOM is correct" msgstr "Bestätigen, dass die Stückliste korrekt ist" #: part/forms.py:163 -#, fuzzy -#| msgid "BOM Item" msgid "BOM file" -msgstr "Stücklisten-Position" +msgstr "Stücklisten-Datei" #: part/forms.py:163 msgid "Select BOM file to upload" @@ -3247,7 +3209,7 @@ msgstr "verknüpftes Teil" #: part/forms.py:201 msgid "Select part category" -msgstr "Teilekategorie wählen" +msgstr "Teil-Kategorie wählen" #: part/forms.py:218 msgid "Duplicate all BOM data for this part" @@ -3286,14 +3248,12 @@ msgid "Add parameter template to all categories" msgstr "Parameter-Vorlage zu allen Kategorien hinzufügen" #: part/forms.py:342 part/models.py:2151 -#, fuzzy -#| msgid "Buy parts" msgid "Sub part" -msgstr "Teile kaufen" +msgstr "Untergeordnetes Teil" #: part/forms.py:370 msgid "Input quantity for price calculation" -msgstr "Eintragsmenge zur Preisberechnung" +msgstr "Menge für die Preisberechnung" #: part/models.py:73 msgid "Default location for parts in this category" @@ -3310,14 +3270,14 @@ msgstr "Standard-Stichworte für Teile dieser Kategorie" #: part/models.py:82 part/models.py:2103 #: part/templates/part/part_app_base.html:9 msgid "Part Category" -msgstr "Teilkategorie" +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 #: users/models.py:37 msgid "Part Categories" -msgstr "Teile-Kategorien" +msgstr "Teil-Kategorien" #: part/models.py:446 part/models.py:458 #, python-brace-format @@ -3447,7 +3407,7 @@ msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" #: part/models.py:841 msgid "Can this part be used to build other parts?" -msgstr "Kann dieses Teil zum Bau von anderen genutzt werden?" +msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" #: part/models.py:847 msgid "Does this part have tracking for unique items?" @@ -3604,10 +3564,8 @@ msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" #: part/models.py:2163 -#, fuzzy -#| msgid "Overdue" msgid "Overage" -msgstr "Überfällig" +msgstr "Überschuss" #: part/models.py:2164 msgid "Estimated build wastage quantity (absolute or percentage)" @@ -3622,10 +3580,8 @@ msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" #: part/models.py:2172 -#, fuzzy -#| msgid "BOM checksum" msgid "Checksum" -msgstr "Prüfsumme der Stückliste" +msgstr "Prüfsumme" #: part/models.py:2172 msgid "BOM line checksum" @@ -3639,7 +3595,7 @@ msgstr "Geerbt" #: part/models.py:2177 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -"Diese Stücklisten-Position wird in dei Stücklisten von Teil-Varianten vererbt" +"Diese Stücklisten-Position wird in die Stücklisten von Teil-Varianten vererbt" #: part/models.py:2253 part/views.py:1592 part/views.py:1644 #: stock/models.py:260 @@ -3655,16 +3611,12 @@ msgid "BOM Item" msgstr "Stücklisten-Position" #: part/models.py:2384 -#, fuzzy -#| msgid "Part" msgid "Part 1" -msgstr "Teil" +msgstr "Teil 1" #: part/models.py:2388 -#, fuzzy -#| msgid "Part" msgid "Part 2" -msgstr "Teil" +msgstr "Teil 2" #: part/models.py:2388 msgid "Select Related Part" @@ -3705,18 +3657,21 @@ msgstr "Stückliste" #, python-format msgid "The BOM for <i>%(part)s</i> has changed, and must be validated.<br>" msgstr "" +"Die Stückliste für <i>%(part)s</i> hat sich geändert und muss kontrolliert " +"werden.<br>" #: part/templates/part/bom.html:21 #, python-format msgid "" "The BOM for <i>%(part)s</i> was last checked by %(checker)s on %(check_date)s" msgstr "" +"Die Stückliste für <i>%(part)s</i> wurde zuletzt von %(checker)s am " +"%(check_date)s kontrolliert" #: part/templates/part/bom.html:25 -#, fuzzy, python-format -#| msgid "This line has been validated" +#, python-format msgid "The BOM for <i>%(part)s</i> has not been validated." -msgstr "Diese Position wurde validiert" +msgstr "Die Stückliste für <i>%(part)s</i> wurde noch nicht kontrolliert" #: part/templates/part/bom.html:32 msgid "Remove selected BOM items" @@ -3744,7 +3699,7 @@ msgstr "Stückliste bearbeiten" #: part/templates/part/bom.html:55 msgid "Validate Bill of Materials" -msgstr "Stückliste validieren" +msgstr "Stückliste kontrollieren" #: part/templates/part/bom.html:61 part/views.py:1883 msgid "Export Bill of Materials" @@ -3858,20 +3813,18 @@ msgid "Each part must already exist in the database" msgstr "Jedes Teil muss bereits in der Datenbank bestehen" #: part/templates/part/bom_upload/upload_file.html:27 -#, fuzzy -#| msgid "Uploaded" msgid "Upload File" -msgstr "Hochgeladen" +msgstr "Datei hochgeladen" #: part/templates/part/bom_validate.html:6 #, python-format msgid "" "Confirm that the Bill of Materials (BOM) is valid for:<br><i>%(part)s</i>" -msgstr "" +msgstr "Bestätigen Sie das die Stückliste für <br><i>%(part)s</i> korrekt ist" #: part/templates/part/bom_validate.html:9 msgid "This will validate each line in the BOM." -msgstr "" +msgstr "Damit wird jede Zeile der Stückliste kontrolliert" #: part/templates/part/build.html:10 msgid "Part Builds" @@ -3879,7 +3832,7 @@ msgstr "gefertigte Teile" #: part/templates/part/build.html:18 msgid "Start New Build" -msgstr "Neuen Bau beginnen" +msgstr "Neuen Bauauftrag beginnen" #: part/templates/part/category.html:20 msgid "All parts" @@ -3887,15 +3840,15 @@ msgstr "Alle Teile" #: part/templates/part/category.html:25 part/views.py:2264 msgid "Create new part category" -msgstr "Teilkategorie anlegen" +msgstr "Teil-Kategorie anlegen" #: part/templates/part/category.html:31 msgid "Edit part category" -msgstr "Teilkategorie bearbeiten" +msgstr "Teil-Kategorie bearbeiten" #: part/templates/part/category.html:36 msgid "Delete part category" -msgstr "Teilekategorie löschen" +msgstr "Teil-Kategorie löschen" #: part/templates/part/category.html:46 part/templates/part/category.html:85 msgid "Category Details" @@ -3923,11 +3876,11 @@ msgstr "Teile-Daten exportieren" #: part/templates/part/category.html:125 msgid "Set category" -msgstr "Teilkategorie auswählen" +msgstr "Teil-Kategorie auswählen" #: part/templates/part/category.html:125 msgid "Set Category" -msgstr "Teilkategorie auswählen" +msgstr "Teil-Kategorie auswählen" #: part/templates/part/category.html:128 msgid "Export Data" @@ -3979,7 +3932,7 @@ msgstr "Kategorie" #: part/templates/part/category_delete.html:13 msgid "top level Parts category" -msgstr "oberste Teilekategorie" +msgstr "oberste Teil-Kategorie" #: part/templates/part/category_delete.html:25 msgid "parts" @@ -4408,11 +4361,11 @@ msgstr "neue Variante anlegen" #: part/views.py:89 msgid "Add Related Part" -msgstr "zugeordnetes Teil hinzufügen" +msgstr "verknüpftes Teil hinzufügen" #: part/views.py:144 msgid "Delete Related Part" -msgstr "zugeordnetes Teil entfernen" +msgstr "verknüpftes Teil entfernen" #: part/views.py:158 msgid "Add part attachment" @@ -4448,7 +4401,7 @@ msgstr "Testvorlage löschen" #: part/views.py:295 msgid "Set Part Category" -msgstr "Teilkategorie auswählen" +msgstr "Teil-Kategorie auswählen" #: part/views.py:345 #, python-brace-format @@ -4581,15 +4534,15 @@ msgstr "Teilparameter löschen" #: part/views.py:2212 msgid "Edit Part Category" -msgstr "Teilkategorie bearbeiten" +msgstr "Teil-Kategorie bearbeiten" #: part/views.py:2250 msgid "Delete Part Category" -msgstr "Teilkategorie löschen" +msgstr "Teil-Kategorie löschen" #: part/views.py:2256 msgid "Part category was deleted" -msgstr "Teilekategorie wurde gelöscht" +msgstr "Teil-Kategorie wurde gelöscht" #: part/views.py:2308 msgid "Create Category Parameter Template" @@ -4621,19 +4574,19 @@ msgstr "Vorlagen Name" #: report/models.py:186 msgid "Report template file" -msgstr "Report Vorlage Datei" +msgstr "Bericht-Vorlage Datei" #: report/models.py:193 msgid "Report template description" -msgstr "Report Vorlage Beschreibung" +msgstr "Bericht-Vorlage Beschreibung" #: report/models.py:199 msgid "Report revision number (auto-increments)" -msgstr "Report Revisionsnummer (autom. erhöht)" +msgstr "Bericht Revisionsnummer (autom. erhöht)" #: report/models.py:275 msgid "Report template is enabled" -msgstr "Report Vorlage ist ein" +msgstr "Bericht-Vorlage ist ein" #: report/models.py:295 msgid "StockItem query filters (comma-separated list of key=value pairs)" @@ -4651,7 +4604,7 @@ msgstr "Test-Ergebnisse für BestandsObjekte in Baugruppen einschließen" #: report/models.py:347 msgid "Build Filters" -msgstr "Bau Filter" +msgstr "Bauauftrag Filter" #: report/models.py:348 msgid "Build query filters (comma-separated list of key=value pairs" @@ -4674,10 +4627,8 @@ msgid "Sales order query filters" msgstr "Auftrags-Abfragefilter" #: report/models.py:500 -#, fuzzy -#| msgid "Shipped" msgid "Snippet" -msgstr "Versendet" +msgstr "Snippet" #: report/models.py:501 msgid "Report snippet file" @@ -4688,10 +4639,8 @@ msgid "Snippet file description" msgstr "Snippet-Beschreibung" #: report/models.py:540 -#, fuzzy -#| msgid "Assembly" msgid "Asset" -msgstr "Baugruppe" +msgstr "Ressource" #: report/models.py:541 msgid "Report asset file" @@ -4742,16 +4691,14 @@ msgid "Fail" msgstr "fehlgeschlagen" #: stock/api.py:199 -#, fuzzy, python-brace-format -#| msgid "Counted stock for {n} items" +#, python-brace-format msgid "Updated stock for {n} items" -msgstr "Bestand für {n} Objekte erfasst" +msgstr "Bestand für {n} Objekte geändert" #: stock/api.py:268 -#, fuzzy, python-brace-format -#| msgid "Moved {n} items to {dest}" +#, python-brace-format msgid "Moved {n} parts to {loc}" -msgstr "{n} Teile nach {dest} bewegt" +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 @@ -4759,10 +4706,8 @@ msgid "Expiry Date" msgstr "Ablaufdatum" #: stock/forms.py:115 stock/forms.py:407 -#, fuzzy -#| msgid "Batch code for this stock item" msgid "Expiration date for this stock item" -msgstr "Losnummer für dieses BestandsObjekt" +msgstr "Ablaufdatum für dieses BestandsObjekt" #: stock/forms.py:118 msgid "Enter unique serial numbers (or leave blank)" @@ -4772,23 +4717,20 @@ msgstr "Eindeutige Seriennummern eingeben (oder leer lassen)" msgid "" "Destination for serialized stock (by default, will remain in current " "location)" -msgstr "" +msgstr "Lagerort für serial" #: stock/forms.py:171 msgid "Serial numbers" msgstr "Seriennummern" #: stock/forms.py:171 -#, fuzzy -#| msgid "Number of unique serial number ({s}) must match quantity ({q})" msgid "Unique serial numbers (must match quantity)" msgstr "" -"Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) " -"übereinstimmen" +"Anzahl der eindeutigen Seriennummern (muss mit der Anzahl übereinstimmen)" #: stock/forms.py:173 stock/forms.py:349 msgid "Add transaction note (optional)" -msgstr "hinzufügen Transaktionsnotizen (optional)" +msgstr " Transaktionsnotizen hinzufügen (optional)" #: stock/forms.py:203 stock/forms.py:259 msgid "Select test report template" @@ -4852,13 +4794,11 @@ msgstr "Setze das Ziel als Standard-Lagerort für ausgewählte Teile" #: stock/models.py:54 stock/models.py:511 msgid "Owner" -msgstr "" +msgstr "Besitzer" #: stock/models.py:55 stock/models.py:512 -#, fuzzy -#| msgid "Select filter" msgid "Select Owner" -msgstr "Filter auswählen" +msgstr "Besitzer auswählen" #: stock/models.py:205 msgid "Created stock item" @@ -4944,7 +4884,7 @@ msgstr "Quellbau" #: stock/models.py:447 msgid "Build for this stock item" -msgstr "Bau für dieses BestandsObjekt" +msgstr "Bauauftrag für dieses BestandsObjekt" #: stock/models.py:458 msgid "Source Purchase Order" @@ -4966,10 +4906,8 @@ msgstr "" "gekennzeichnet" #: stock/models.py:487 -#, fuzzy -#| msgid "Delete Template" msgid "Delete on deplete" -msgstr "Vorlage löschen" +msgstr "Löschen wenn leer" #: stock/models.py:487 msgid "Delete this Stock Item when stock is depleted" @@ -4982,7 +4920,7 @@ msgstr "BestandsObjekt-Notizen" #: stock/models.py:507 msgid "Single unit purchase price at time of purchase" -msgstr "EK-Preis für eine Einheit bei EK-Datum" +msgstr "Preis für eine Einheit bei Einkauf" #: stock/models.py:612 msgid "Assigned to Customer" @@ -5125,7 +5063,7 @@ msgstr "" #: stock/templates/stock/item_base.html:32 msgid "Edit the stock item from the build view." -msgstr "Ändern des BestandsObjekts in der Bau Ansicht." +msgstr "Ändern des BestandsObjekts in der Bauauftrag-Ansicht." #: stock/templates/stock/item_base.html:45 msgid "This stock item has not passed all required tests" @@ -5137,7 +5075,7 @@ msgstr "Dieses BestandsObjekt ist einem Auftrag zugewiesen" #: stock/templates/stock/item_base.html:57 msgid "This stock item is allocated to Build" -msgstr "Dieses BestandsObjekt ist dem Bau zugewiesen" +msgstr "Dieses BestandsObjekt ist dem Bauauftrag zugewiesen" #: stock/templates/stock/item_base.html:63 msgid "" @@ -5188,7 +5126,7 @@ msgstr "Druck Aktionen" #: stock/templates/stock/item_base.html:147 #: stock/templates/stock/item_tests.html:27 msgid "Test Report" -msgstr "Test Report" +msgstr "Test-Bericht" #: stock/templates/stock/item_base.html:156 msgid "Stock adjustment actions" @@ -5558,17 +5496,15 @@ msgstr "BestandsObjekte bewegen" #: stock/views.py:998 msgid "Move" -msgstr "" +msgstr "Verschieben" #: stock/views.py:999 msgid "Count Stock Items" msgstr "BestandsObjekte zählen" #: stock/views.py:999 -#, fuzzy -#| msgid "Account" msgid "Count" -msgstr "Konto" +msgstr "Anzahl" #: stock/views.py:1000 msgid "Remove From Stock" @@ -5576,7 +5512,7 @@ msgstr "Aus Lagerbestand entfernen" #: stock/views.py:1000 msgid "Take" -msgstr "" +msgstr "Entfernen" #: stock/views.py:1001 msgid "Add Stock Items" @@ -5706,7 +5642,7 @@ msgstr "neueste Teile" #: templates/InvenTree/index.html:99 msgid "BOM Waiting Validation" -msgstr "Stücklisten erwarten Validierung" +msgstr "Stücklisten erwarten Kontrolle" #: templates/InvenTree/index.html:128 msgid "Recently Updated" @@ -5918,7 +5854,7 @@ msgstr "Vorname" #: templates/InvenTree/settings/user.html:36 msgid "Last Name" -msgstr "Nacname" +msgstr "Nachname" #: templates/InvenTree/settings/user.html:40 msgid "Email Address" @@ -6101,11 +6037,11 @@ msgstr "Stückliste anzeigen" #: templates/js/bom.js:346 msgid "Validate BOM Item" -msgstr "Stücklisten-Position validieren" +msgstr "Stücklisten-Position kontrollieren" #: templates/js/bom.js:348 msgid "This line has been validated" -msgstr "Diese Position wurde validiert" +msgstr "Diese Position wurde kontrolliert" #: templates/js/bom.js:350 msgid "Edit BOM Item" @@ -6121,7 +6057,7 @@ msgstr "Keine Stücklisten-Position(en) gefunden" #: templates/js/build.js:56 msgid "Auto-allocate stock items to this output" -msgstr "BestandsObjekte automatisch Bau-Ausgabe zuordnen" +msgstr "BestandsObjekte automatisch Endprodukt zuordnen" #: templates/js/build.js:62 msgid "Complete build output" @@ -6133,7 +6069,7 @@ msgstr "Bestand von Endpordukt zurücknehmen" #: templates/js/build.js:77 msgid "Delete build output" -msgstr "Endprodukt entfernt" +msgstr "Endprodukt entfernen" #: templates/js/build.js:209 templates/stock_table.html:20 msgid "New Stock Item" @@ -6141,7 +6077,7 @@ msgstr "Neues BestandsObjekt" #: templates/js/build.js:493 msgid "Required Part" -msgstr "benötigter Teil" +msgstr "benötigtes Teil" #: templates/js/build.js:514 msgid "Quantity Per" @@ -6422,15 +6358,15 @@ msgstr "BestandsObjekt ausgewählt" #: templates/js/report.js:55 msgid "Select Report Template" -msgstr "Report Vorlage auswählen" +msgstr "Bericht-Vorlage auswählen" #: templates/js/report.js:70 msgid "Select Test Report Template" -msgstr "Test Report Vorlage auswählen" +msgstr "Test-Bericht-Vorlage auswählen" #: templates/js/report.js:99 msgid "Stock item(s) must be selected before printing reports" -msgstr "BestandsObjekt(e) müssen vor dem Reportdruck ausgewählt werden" +msgstr "BestandsObjekt(e) müssen vor dem Berichtsdruck ausgewählt werden" #: templates/js/report.js:116 templates/js/report.js:169 #: templates/js/report.js:223 templates/js/report.js:277 @@ -6444,15 +6380,15 @@ msgstr "Keine Berichtsvorlagen für ausgewählte BestandsObjekt(e) gefunden" #: templates/js/report.js:152 msgid "Select Builds" -msgstr "Bau auswählen" +msgstr "Bauauftrag auswählen" #: templates/js/report.js:153 msgid "Build(s) must be selected before printing reports" -msgstr "Bau muss vor dem Reportdruck ausgewählt werden" +msgstr "Bauauftrag muss vor dem Berichtsdruck ausgewählt werden" #: templates/js/report.js:170 msgid "No report templates found which match selected build(s)" -msgstr "Keine Berichtvorlagen für ausgewählten Bau gefunden" +msgstr "Keine Berichtvorlagen für ausgewählten Bauauftrag gefunden" #: templates/js/report.js:205 msgid "Select Parts" @@ -6460,7 +6396,7 @@ msgstr "Teile auswählen" #: templates/js/report.js:206 msgid "Part(s) must be selected before printing reports" -msgstr "Teil muss vor dem Reportdruck ausgewählt werden" +msgstr "Teil muss vor dem Berichtsdruck ausgewählt werden" #: templates/js/report.js:224 msgid "No report templates found which match selected part(s)" @@ -6472,7 +6408,7 @@ msgstr "Bestellungen auswählen" #: templates/js/report.js:260 msgid "Purchase Order(s) must be selected before printing report" -msgstr "Bestellung muss vor dem Reportdruck ausgewählt werden" +msgstr "Bestellung muss vor dem Berichtsdruck ausgewählt werden" #: templates/js/report.js:278 templates/js/report.js:332 msgid "No report templates found which match selected orders" @@ -6484,7 +6420,7 @@ msgstr "Aufträge auswählen" #: templates/js/report.js:314 msgid "Sales Order(s) must be selected before printing report" -msgstr "Auftrag muss vor dem Reportdruck ausgewählt werden" +msgstr "Auftrag muss vor dem Berichtsdruck ausgewählt werden" #: templates/js/stock.js:38 msgid "PASS" @@ -7028,6 +6964,32 @@ msgstr "Berechtigungen Einträge zu ändern" msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" +#, fuzzy +#~| msgid "Stocktake" +#~ msgid "take" +#~ msgstr "Inventur" + +#, fuzzy +#~| msgid "Add" +#~ msgid "add" +#~ msgstr "Hinzufügen" + +#, fuzzy +#~| msgid "Delete" +#~ msgid "delete" +#~ msgstr "Löschen" + +#, fuzzy +#~| msgid "Group by Part" +#~ msgid "Sub Part" +#~ msgstr "Gruppieren nach Teil" + +#~ msgid "Target date" +#~ msgstr "Zieldatum" + +#~ msgid "customer" +#~ msgstr "Kunde" + #~ msgid "items" #~ msgstr "Teile" @@ -7048,9 +7010,6 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "description" #~ msgstr "Beschreibung" -#~ msgid "target date" -#~ msgstr "Zieldatum" - #~ msgid "data" #~ msgstr "Wert" @@ -7116,6 +7075,9 @@ msgstr "Berechtigung Einträge zu löschen" #~ msgid "Default_location" #~ msgstr "Standard-Lagerort" +#~ msgid "Buy parts" +#~ msgstr "Teile kaufen" + #~ msgid "Build parts" #~ msgstr "Bauteile" From 32eaf48c12db6c436671f42ddd8d56d8846e84b9 Mon Sep 17 00:00:00 2001 From: Matthias <matmair@live.de> Date: Tue, 6 Apr 2021 18:33:57 +0200 Subject: [PATCH 15/16] fixed styling --- InvenTree/build/forms.py | 2 +- InvenTree/order/models.py | 2 +- InvenTree/part/models.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index b947e02887..0726779b87 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -210,7 +210,7 @@ class CompleteBuildOutputForm(HelperForm): location = forms.ModelChoiceField( queryset=StockLocation.objects.all(), - label = _('Location'), + label=_('Location'), help_text=_('Location of completed parts'), ) diff --git a/InvenTree/order/models.py b/InvenTree/order/models.py index 818bc81707..0c22b7978b 100644 --- a/InvenTree/order/models.py +++ b/InvenTree/order/models.py @@ -638,7 +638,7 @@ class PurchaseOrderLineItem(OrderLineItem): help_text=_("Supplier part"), ) - received = models.DecimalField(decimal_places=5, max_digits=15, default=0, verbose_name=_('Received') , help_text=_('Number of items received')) + received = models.DecimalField(decimal_places=5, max_digits=15, default=0, verbose_name=_('Received'), help_text=_('Number of items received')) purchase_price = MoneyField( max_digits=19, diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index d2f8b805d3..e10dfba4ba 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -2160,7 +2160,7 @@ class BomItem(models.Model): optional = models.BooleanField(default=False, verbose_name=_('Optional'), help_text=_("This BOM item is optional")) overage = models.CharField(max_length=24, blank=True, validators=[validators.validate_overage], - verbose_name=_('Overage'), + verbose_name=_('Overage'), help_text=_('Estimated build wastage quantity (absolute or percentage)') ) From 6412cf1c8735db0e012d6adea93fea1acbaf4f5a Mon Sep 17 00:00:00 2001 From: Oliver Walters <oliver.henry.walters@gmail.com> Date: Wed, 7 Apr 2021 20:55:44 +1000 Subject: [PATCH 16/16] Hide git information if there is an error --- InvenTree/InvenTree/version.py | 4 ++-- InvenTree/templates/about.html | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index 4d3d546789..d7bcd4f7ed 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -37,7 +37,7 @@ def inventreeCommitHash(): try: return str(subprocess.check_output('git rev-parse --short HEAD'.split()), 'utf-8').strip() - except FileNotFoundError: + except: return None @@ -47,5 +47,5 @@ def inventreeCommitDate(): try: d = str(subprocess.check_output('git show -s --format=%ci'.split()), 'utf-8').strip() return d.split(' ')[0] - except FileNotFoundError: + except: return None diff --git a/InvenTree/templates/about.html b/InvenTree/templates/about.html index cedfb40ca1..3305df430f 100644 --- a/InvenTree/templates/about.html +++ b/InvenTree/templates/about.html @@ -25,14 +25,20 @@ <td><span class='fas fa-hashtag'></span></td> <td>{% trans "Django Version" %}</td><td><a href="https://www.djangoproject.com/">{% django_version %}</a></td> </tr> + {% inventree_commit_hash as hash %} + {% if hash %} <tr> <td><span class='fas fa-code-branch'></span></td> - <td>{% trans "Commit Hash" %}</td><td><a href="https://github.com/inventree/InvenTree/commit/{% inventree_commit_hash %}">{% inventree_commit_hash %}</a></td> + <td>{% trans "Commit Hash" %}</td><td>{{ hash }}</td> </tr> + {% endif %} + {% inventree_commit_date as commit_date %} + {% if commit_date %} <tr> <td><span class='fas fa-calendar-alt'></span></td> - <td>{% trans "Commit Date" %}</td><td>{% inventree_commit_date %}</td> + <td>{% trans "Commit Date" %}</td><td>{{ commit_date }}</td> </tr> + {% endif %} <tr> <td><span class='fas fa-book'></span></td> <td>{% trans "InvenTree Documentation" %}</td>